2017-12-28 15 views
0

は、私が読んでドキュメント・ウィジェットの反応:反応ウィジェット:onChange関数でComboboxの名前プロパティ値を取得する方法は?

name 
type: string 
The HTML name attribute, passed directly to the input element. 

を私は何コンボボックスのonChange関数のnameプロパティの値を取得します。だから私は書いた:

<Combobox 
      data={featuredWeightList} 
      valueField="id" 
      textField="displayName" 
      name="featuredWeight" 
      defaultValue={featuredWeight} 
      value={featuredWeight} 
      onChange={this.handleFeaturedWeightChange} 
      /> 

handleFeaturedWeightChange = (evt) => { 
    const id = evt.id; 
    const id = evt.displayName; 
    // I do not have name property in evt variable 

    }; 

私はEVTの変数に名前プロパティを持っていない、私は唯一の「ID」と「のdisplayName」プロパティを得ました。

しかし、通常のhtml入力では、onChange関数で直接nameプロパティを取得できます。このように:

<Input 
      type="text" 
      name="address" 
      value={door.address} 
      onChange={this.handleInputChange} 
     /> 

handleInputChange = (evt) => { 
const target = evt.target; 
const name = target.name; 
console.log('Input value: ', value); 
console.log('Input name: ', name); 
}; 

誰かがのonChange機能でコンボボックスの名前プロパティの値を取得するのに約どのようにいくつかの提案を持っていますか?

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

+0

がコンボボックスからコールバックで送信されている複数のプロパティのですか?あなたは最初の(evt)を取り出すだけです。これは実際にComboboxコンポーネントがどのように構築されているかによって異なります。それが何を返すかなど。そのレポは何から来ていますか? – thsorens

+0

@thsorens第2のプロパティがあります。しかし、2番目のプロパティにnameプロパティが含まれていないことは非常に奇妙です。とにかく助けてくれてありがとう! – Shi

答えて

0

私は(それが他の誰かを助けることができると思います)このように、この問題を解決:

handleComboboxChange = (data, param) => { 
    console.log(data, param); 
    //Output: {id: 5, displayName: 5} "featuredWeight" 

    }; 

<Combobox 
    data={featuredWeightList} 
    valueField="id" 
    textField="displayName" 
    name="featuredWeight" 
    defaultValue={featuredWeight} 
    value={featuredWeight} 
    onChange={(param) => this.handleComboboxChange(param, 'featuredWeight')} 
/> 
1

javascriptのbind()関数を使用することができます。

<Combobox 
      data={featuredWeightList} 
      valueField="id" 
      textField="displayName" 
      name="featuredWeight" 
      defaultValue={featuredWeight} 
      value={featuredWeight} 
      onChange={this.handleFeaturedWeightChange.bind(this, "featuredWeight")} 
      /> 

handleFeaturedWeightChange = (name, evt) => { 
    const id = evt.id; 
    const id = evt.displayName; 
    // I do not have name property in evt variable 
    console.log('name', name); 
    }; 

これを行うための別の方法(バインドなし()):現在選択された値を読み取るために、この変数を使用することができます

function a(name) { 
    return function(evt) { 
     console.log('name', name) 
    } 
}; 

var b = a('featuredWeight'); 
b({a: 'a', b: 'b'}); 
+0

'handleFeaturedWeightChange'関数は、コンポーネントで見ることができます。だから私はbind()によるとは思わない。 – Shi

+0

@ b-bastien助けてくれてありがとう。それはうまくいくはずですが、ESLintによると、 'JSXの小道具は.bind()'を使うべきではありません。しかし、この問題を解決する良い方法がなければ、私はこのようにします。 bind()なしの方法について。 onChange関数でコンポーネント名を取得したいので、同じハンドラを使って異なるコンポーネントを扱うことができます。それは私にとってはうまくいかないかもしれません。 – Shi

0

function a(name, evt) { 
    console.log('name', name); 
    console.log('evt', evt); 
}; 

var b = a.bind(this, 'featuredWeight'); 
b({a: 'a', b: 'b'}); 

だから、のようになります。 。 onchange関数の は、次のコード行を書き込みます。

$('#RequestTypeId').change(function (e) { 
 
     if ($(this).val() === "1") { 
 
      //your code 
 
      
 
     }

関連する問題