diff --git a/README.md b/README.md index f584db03e..1f184aecd 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ React.render(c, container); |combobox | enable combobox mode(can not set multiple at the same time) | bool | false | |multiple | whether multiple select | bool | false | |disabled | whether disabled select | bool | false | +|triggerOnchange | trigger input onChange event after an option is selected(onSelect) | bool | true | |filterOption | whether filter options by input value. default filter by option's optionFilterProp prop's value | bool | true/Function(inputValue:string, option:Option) | |optionFilterProp | which prop value of option will be used for filter if filterOption is true | String | 'value' | |optionLabelProp | which prop value of option will render as content of select | String | 'value' | diff --git a/src/PropTypes.js b/src/PropTypes.js index 9317e2c81..55f1344e2 100644 --- a/src/PropTypes.js +++ b/src/PropTypes.js @@ -40,6 +40,7 @@ export const SelectPropTypes = { showSearch: PropTypes.bool, disabled: PropTypes.bool, allowClear: PropTypes.bool, + triggerOnchange: PropTypes.bool, showArrow: PropTypes.bool, tags: PropTypes.bool, prefixCls: PropTypes.string, diff --git a/src/Select.jsx b/src/Select.jsx index ef4045440..6f455899d 100644 --- a/src/Select.jsx +++ b/src/Select.jsx @@ -52,6 +52,7 @@ const Select = React.createClass({ defaultActiveFirstOption: true, showSearch: true, allowClear: false, + triggerOnchange: true, placeholder: '', onChange: noop, onFocus: noop, @@ -270,8 +271,9 @@ const Select = React.createClass({ this.setOpenState(false, true); } this.fireChange(value); + let inputValue; - if (isCombobox(props)) { + if (isCombobox(props) && props.triggerOnchange) { inputValue = getPropValue(item, props.optionLabelProp); } else { inputValue = ''; diff --git a/tests/Select.triggerOnchange.spec.js b/tests/Select.triggerOnchange.spec.js new file mode 100644 index 000000000..76a4c3dfd --- /dev/null +++ b/tests/Select.triggerOnchange.spec.js @@ -0,0 +1,36 @@ +/* eslint-disable no-undef */ +import React from 'react'; +import { mount } from 'enzyme'; +import Select, { Option } from '../src'; + +describe('test test test', () => { + it('fires input change by default ', () => { + const wrapper = mount( + + ); + + wrapper.find('.rc-select').simulate('click'); + const dropdownWrapper = mount(wrapper.find('Trigger').node.getComponent()); + + dropdownWrapper.find('MenuItem').first().simulate('click'); + expect(wrapper.state().inputValue).toBe('1'); + }); + + it('not fires input change when triggerOnchange is false ', () => { + const wrapper = mount( + + ); + + wrapper.find('.rc-select').simulate('click'); + const dropdownWrapper = mount(wrapper.find('Trigger').node.getComponent()); + + dropdownWrapper.find('MenuItem').first().simulate('click'); + expect(wrapper.state().inputValue).toBe(''); + }); +});