2017-12-28 4 views
0

Ich lese in reagieren-Widgets Dokumentation:react-widgets: Wie Combobox Name Eigenschaft Wert in OnChange Funktion erhalten?

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

Und ich, was den Namen Eigenschaftswert in Combobox onChange Funktion zu erhalten. Also schrieb ich:

<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 

    }; 

ich nicht Name Eigenschaft in evt Variable haben, ich habe nur "id" und "Wähle eine" Eigenschaft.

Aber eine normale HTML-Eingabe, kann ich direkt Name Eigenschaft in OnChange-Funktion erhalten. Wie folgt aus:

<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); 
}; 

jemand einen Vorschlag über Wie funktioniert haben Combobox Eigenschaft name Wert in onChange Funktion erhalten?

Vielen Dank!

+0

gibt es mehr als eine Eigenschaft, die in den Rückruf aus der Combobox geschickt? Sie holen nur das erste (evt). Es hängt wirklich davon ab, wie die Combobox-Komponente aufgebaut ist. Was es zurückgibt und so weiter. Aus welchem ​​Repo stammt das? – thsorens

+0

@thsorens gibt es zweite Eigenschaft. Aber es ist sehr seltsam, dass in der zweiten Eigenschaft keine Namenseigenschaft enthalten ist. Trotzdem vielen Dank für die Hilfe! – Shi

Antwort

0

ich dieses Problem auf diese Weise gelöst (Hoffe, dass es jemand anderes helfen kann):

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

Möglicherweise kann die JavaScript bind() -Funktion verwendet werden.

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

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

So sollte es aussehen:

<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); 
    }; 

Einen anderen Weg, dies zu tun (ohne bind()):

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

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

Die Funktion 'handleFeaturedWeightChange' ist in der Komponente sichtbar. Also ich denke, es ist nicht bind(). – Shi

+0

@ b-bastien Danke für die Hilfe. Es sollte funktionieren, aber laut ESLint: 'JSX Requisiten sollten nicht .bind()' verwenden. Aber wenn es keinen besseren Weg gibt, dieses Problem zu lösen, werde ich das tun. Über den Weg ohne bind(). Ich möchte den Komponentennamen in der OnChange-Funktion abrufen, damit ich denselben Handler verwenden kann, um verschiedene Komponenten zu behandeln. Also kann es für mich nicht funktionieren. – Shi

0

Sie diese Variable verwenden kann den aktuellen ausgewählten Wert zu lesen . in onchange Funktion schreiben folgende Codezeile.

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

Verwandte Themen