Javascript / jQuery:为什么焦点事件不在输入字段上触发?

时间:2010-09-16 00:06:55

标签: javascript jquery events forms input

我正在尝试通过.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

1 个答案:

答案 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标记,则事件处理程序将自动绑定。