17

MenuItem内のInputでReact-Bootstrap DropDownを使用しています (そうしないと、コンソールがUncaught TypeError: Cannot read property 'focus' of undefined と叫びます)

さて、ドロップダウンがレンダリングされ、入力はメニュー項目内にあります (すべて問題ありません)。ただし、入力内をクリックすると、ドロップダウンが閉じます。

ここに私のJSXがあります

<Bootstrap.DropdownButton title={this.state.callIdTitle} id="callId">
  <Bootstrap.MenuItem eventKey='1'>
   <input ref="callIdInput" type='text' eventKey='2' placeholder='Enter Call ID' />
  </Bootstrap.MenuItem>
</Bootstrap.DropdownButton>

正しい方向を指していることは非常に高く評価されています。私はこれを一日中解決しようとしています。

ありがとうございました。

4

6 に答える 6

10

クリックが入力要素からのものである場合は何もしないドロップダウンのカスタム onToggle を使用することで、なんとか機能させることができました。私は基本的に次のようなものになりました:

だから、このようなもの:

var React = require('react');

var ReactBootstrap = require('react-bootstrap'),
    Dropdown = ReactBootstrap.Dropdown,
    DropdownToggle = Dropdown.Toggle,
    DropdownMenu = Dropdown.Menu,
    Input = ReactBootstrap.Input,
    MenuItem = ReactBootstrap.MenuItem;

module.exports = React.createClass({
  displayName: 'DropdownWithInput',

  setValue: function(e) {
    var value = e.target.value;

    this.setState({value: value});
  },

  onSelect: function(event, value) {
    this.setState({value: value});
  },

  inputWasClicked: function() {
    this._inputWasClicked = true;
  },

  onToggle: function(open) {
    if (this._inputWasClicked) {
      this._inputWasClicked = false;
      return;
    }
    this.setState({open: open});
  },

  render: function() {
    return (
        <Dropdown id={this.props.id} open={this.state.open} onToggle={this.onToggle}
                  className="btn-group-xs btn-group-default">
          <DropdownToggle bsStyle="default" bsSize="xs" className="dropdown-with-input dropdown-toggle">
            Dropdown with input
          </DropdownToggle>

          <DropdownMenu>
            <Input
                type="text"
                ref="inputElem"
                autoComplete="off"
                name={this.props.name}
                placeholder="Type something here"
                onSelect={this.inputWasClicked}
                onChange={this.setValue}
                />
            <MenuItem divider key={this.props.id + '-dropdown-input-divider'}/>
            <MenuItem eventKey={1} onSelect={this.onSelect}>One</MenuItem>
            <MenuItem eventKey={2} onSelect={this.onSelect}>Two</MenuItem>
            <MenuItem eventKey={3} onSelect={this.onSelect}>Three</MenuItem>
          </DropdownMenu>
        </Dropdown>
    );
  }

});

これがあなたにとってもうまくいくことを願っています。

于 2015-09-29T11:36:55.887 に答える
3

この機能は、React-Bootstrap の比較的新しい機能です。新しいドロップダウン カスタマイズ ドキュメントを確認してください: http://react-bootstrap.github.io/components.html#btn-dropdowns-customそのセクションの最後の例には、入力のあるドロップダウンが含まれています。ドロップダウン トリガーはリンクのように見えますが、カスタマイズすることもできます。

于 2015-09-11T02:06:49.330 に答える