ユーザーが操作するフォームを含むプログラムを作成しました。さまざまなボタンにバインドされたイベントが多数あるため、フォーム入力情報を含む JS を解析するループを作成しました。以下にデータの例を示します。
var value = 0,
forms = {
place_controls : {
attrs : {
'class' : 'place-form'
},
input : {
place_x : {
attrs : {
type : 'text',
},
events : {
change : function () {
value = 10;
}
}
},
place_y : {
attrs : {
type : 'text',
},
events : {
change : function () {
value = 50
}
}
}
}
}
}
次に、データは次のように解析されます。
$.each(forms, function (form_index, form) {
var $form_markup = $('<form>').attr(form.attrs);
// Next: loop through each input element of the form we've reached
$.each(form.input, function (element_index, element) {
var $elem = $('<input>').attr(element.attrs);
$elem.appendTo($form_markup);
if (element.events !== undefined) {
$.each(element.events, function (event_index, event) {
$elem.bind(event_index, event);
//$form_markup.on(event_index, $elem, event);
});
}
});
$form_markup.appendTo($form_goes_here);
});
ご覧のとおり、私は現在使用.bind()
していますが、使用したいです.on()
。残念ながら、これを行うと、フォーム内のすべてのアイテムが関数によって解析された最後のイベントにバインドされます。すべてを使用すると、.bind()
すべてが計画どおりに機能します。つまり、「place_x」をクリックすると値が 10 に設定され、「place_y」をクリックすると値が 50 に設定されます。
を使用する場合.on()
、どちらを変更しても値は 50 に設定されます。これは、最後の関数が各イベントにバインドされるためだと想定しています。
私が間違ったことを誰かが見ることができますか?
更新:これを行うにはさまざまな方法があり、その後コードの動作方法を変更しましたが、この質問は、なぜ.bind()
機能し、なぜ機能し.on()
ないのかに関連しています。