【问题标题】:How to delegate focus event? [duplicate]如何委托焦点事件? [复制]
【发布时间】:2013-01-24 07:35:07
【问题描述】:

可能重复:
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....

【问题讨论】:

  • 试试focusin看看是否有效,或者event.stopPropagation()
  • default_input_value 似乎保留了最后一个焦点输入的值,而不是每个输入的值。您是否正在尝试解决一些水印/占位符问题?
  • @elclanrs 谢谢你,focus 返回focusin
  • @Stefan,不,问题出在event.type === 'focus'
  • 焦点事件没有冒泡。谷歌,伙计。谁他妈赞成这个?

标签: jquery


【解决方案1】:

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

focusblur 事件由 W3C 指定为不冒泡,但 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);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多