如何委托焦点事件?

时间:2013-01-24 07:35:08

标签: jquery

  

可能重复:
  Focus and blur jQuery events not bubbling

var default_input_value = null;
jQuery('body').on('focus focusout', 'input[type="text"]', function(event){
    if(event.type === 'focus'){
        default_input_value = jQuery(this).val();
        jQuery(this).val('');
    }else if(event.type === 'focusout')
        if(jQuery(this).val().length === 0)
        jQuery(this).val(default_input_value);
    }
);

此代码根本不响应该事件。 附: 重要的是会有input[type="text"],因为jQuery focus在某些情况下checkbox也会触发....

1 个答案:

答案 0 :(得分:19)

.on() jquery文档下,有一个描述:

W3C指定focusblur事件不冒泡,但jQuery定义了冒泡的跨浏览器focusinfocusout事件。当focusblur用于附加委托事件处理程序时,jQuery会映射名称并分别将其作为focusinfocusout传递。为保持一致性和清晰度,请使用冒泡事件类型名称。

希望这会有用。

你可以试试这段代码:

var default_input_value = null;
jQuery('body').on('focusin focusout', 'input[type="text"]', function(event){
    if(event.type === 'focusin'){
        default_input_value = jQuery(this).val();
        jQuery(this).val('');
    }else if(event.type === 'focusout'){
        if(jQuery(this).val().length === 0)
        jQuery(this).val(default_input_value);
    }
});