Replacing jQuery.bind with jQuery.on
Replacing jQuery.bind with jQuery.on
我编写了一个程序,其中包含一个用户可以交互的表单。因为有很多事件绑定到不同的按钮,所以我编写了一个循环,解析一些包含表单输入信息的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()
为什么不工作有关。
//$elem.bind(event_index, event);
//It looks like you should just be using .on() like this
$elem.on(event_index, event);
看起来您尝试使用.on()
的方式是以实时冒泡事件的方式,看起来只有您创建的最后一个事件被卡住了,为什么每个值都被设置为50。
//$form_markup.on(event_index, $elem, event);
您可以在一个简单的调用中创建具有属性映射的元素,其中包括处理程序函数:
var $elem = $('<input/>', properties);
"属性"对象可以包含事件处理程序:
var $elem = $('<input/>', {
type: 'text',
name: 'somethingUseful',
click: function(ev) { /* click handler */ },
change: function(ev) { /* change handler */ },
css: { color: "red" }
});
相关文章:
- JQuery.on(“keydown”)追加到页面时不工作
- Jquery on单击“显示信息”
- 多个jQuery.on()事件无法运行xBrowser(取决于顺序)
- jquery on()和off()不起作用
- jQuery on()-不;第一次点击时无法工作
- jquery on click事件来显示内容
- Replacing jQuery.bind with jQuery.on
- jQuery.on-click事件不会发生
- jQuery on('单击',..)未处理附加的元素
- 如何在循环中使用jQuery.on()方法,而不覆盖我循环的对象
- 了解'这'在jQuery on change事件中
- 在没有事件的情况下使用.jquery.on()
- 如何以正确的方式编写这个jquery on()
- jQuery-On按钮点击触发器选择选项
- jQuery .on 绑定不触发
- jquery on触发器按键事件两次
- jQuery on() 方法只能通过 childSelector 间接工作
- jquery on('change'.. 在多个标签中不起作用
- jquery on drop 获取完整路径名
- jquery .on() is not triggering