我正在尝试通过.live()
jQuery方法将简单的焦点/模糊事件监听器附加到我的输入,但我注意到的是focus
事件没有触发而blur
事件1}} event is。
奇怪......希望你可能知道为什么会这样。
以下是代码:
function rowHighlight() {
var form = $('form.register'),
ele = {};
form.find('label').each(function(i) {
var link = this.htmlFor;
form.find('label[for='+link+'],input[name='+link+'],textarea[name='+link+']').wrapAll('<span class="row"/>');
});
ele.row = $('form > .row');
ele.inputs = ele.row.find('input');
$.each(ele.inputs, function(i) {
$(this).focus(function() {
console.log('hello'); // this will fire.
});
$(this).live('focus blur', function(e) {
console.log('current event type: '+e.type); // the focus on this will not fire!?
( e.type=='focus' ? console.log('focussed') : console.log('blurred') )
});
});
}
rowHighlight();
$(this).focus…
只是将其作为调试内容而删除它并不会使focus
侦听器上的live
工作...
任何帮助都将不胜感激。
感谢您的光临。
Jannis
答案 0 :(得分:3)
尝试更改此行:
$.each(ele.inputs, function(i) {
到这一行:
ele.inputs.each(function() {
<强>解释强>
jQuery中有两种形式的each()
。
迭代地图或数组:
$.each([1,2,3], function(index, value){
});
迭代jQuery对象时或:
$("a").each(function(){
});
http://api.jquery.com/jQuery.each/
$(this)
表示只在第二次使用时才会出现的情况:
$("a").each(function(){
$(this).remove();
});
Live vs. Bind:
$("a").click(someClickEventHandler);
...将someClickEventHandler
点击事件处理程序绑定到执行此操作时存在的每个a
标记。
$("a").live("click", someClickEventHandler);
...将someClickEventHandler
点击事件处理程序绑定到执行此操作时存在的每个a
标记,并且它还会将someClickEventHandler
点击事件处理程序绑定到每个{{1将永远存在的事件。例如,如果从Ajax响应创建a
标记,则事件处理程序将自动绑定。