【问题标题】:jQuery focusout not triggering on exit of input elementjQuery focusout不会在输入元素退出时触发
【发布时间】:2013-05-19 12:36:36
【问题描述】:

无论我点击文档的哪个位置,我都想触发 focusout 事件。但是,我使用的是可排序列表,其中每个可排序项目都包含一个文本区域,单击可排序项目时不会触发 focusout 事件。可拖动项目也是如此。我创建了一个 jsfiddle 来展示这个问题:

单击文本区域并尝试单击蓝色矩形内的任意位置: 在谷歌浏览器中测试 http://jsfiddle.net/RWJhs/

是否有任何已知的解决方法?

JavaScript:

$("textarea").focusout(function(){
    alert("Do something");
});

$("#draggable").draggable();

HTML:

<div id="draggable">
    <textarea></textarea>
</div>

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你可以试试这个

    $("textarea").focusout(function(){
        alert("Do something");
    }).click(function(e){
        e.stopPropagation();
        return true;
    });
    
    $("#draggable").draggable({
        start: function( event, ui ) {
            if( $('textarea:focus', this).length ){
                $('textarea', this).focusout();
            }
        }
    }).click(function(e){
        if( $('textarea:focus', this).length ){
            $('textarea', this).focusout();
        }
    });
    

    DEMO.

    【讨论】:

      【解决方案2】:

      这对我有用: http://jsfiddle.net/RWJhs/1/

      $("textarea").focusout(function(){
          alert("Do something");
      });
      
      $('#draggable not(textarea)').on('click');
      $("#draggable").draggable();
      

      编辑: 手动触发 blur 事件似乎可以在不禁用拖动的情况下使其工作 看这里:http://jsfiddle.net/RWJhs/6/

      $("#draggable").on('click', function(e){
          if (e.target == this && $('textarea').is(':focus')) $('textarea').blur();
      });
      $("textarea").blur(function(){
          alert("Do something");
      });
      $("#draggable").draggable();
      

      【讨论】:

      • 它修复了焦点问题...但现在该项目不可拖动,因此它并没有真正修复
      • 是否可以在点击发生而不是在拖放事件之后触发事件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多