有谁知道,如果IE“回归假”?(Does anyone know if IE 'return

2019-09-27 13:37发布

这个简单的测试代码在IE除外(在IE8测试)所有的浏览器:

#dBox {
    height:100px;
    width: 230px;   
    overflow-y:auto;    
}

$(function () { 
    $('#s').focus(function(){  
        $(this).after('<ul id="dBox"></ul>');  
        for (i=0;i<10;i++) $('#dBox').append('<li>'+i+'</li>');
    });
    $('#dBox').live('mousedown',function(event) {  
        //event.stopPropagation();  
        //event.preventDefault();  
        //console.log  (event.isDefaultPrevented());  
        //event.stopImmediatePropagation();  
        return false;   
     });  
    $('#s').blur(function () { $('#dBox').remove();  });
});     
<input type="text" id="s"/>

我试着从活FN所有选项,但没有运气。
event.isDefaultPrevented()返回true,但#dBox它仍然被删除。
我甚至一直在努力,结合重点FN内一个普通鼠标按下。 但是,同样的结果它的工作在所有浏览器,但不是IE。
有没有人有什么不对任何想法?

Answer 1:

这是因为事件代表团的直接jQuery的生活()使用实时的直接元素不绑定绑定事件。 相反,它重视文档的根节点的处理程序。

该.live()方法能够影响尚未通过使用事件代表团添加到DOM元素:绑定到一个祖先元素的处理程序是负责被其后代触发的事件。 传递给.live()被从未绑定到一个元素的处理程序; 相反,.live()结合一种特殊的处理程序,以对DOM树的根。 在我们的例子中,当单击新的元素时,发生以下步骤:

假设你想保持专注当点击#dBox元素,这将工作和这里的输入是一个演示 http://www.jsfiddle.net/WurDE/

注意:如果你不希望保留的焦点输入然后取下trigger('focus')从代码。

$(function () {
    $('#s').focus(function(){
        if (!$('#dBox').length) {
          var $dbox = $('<ul id="dBox"></ul>');
          for (i=0;i<10;i++) $dbox.append('<li>'+i+'</li>');
          $(this).after($dbox);
          $dbox.bind("mousedown", function() {
            $('#s').unbind('blur')
          });
          $dbox.bind("mouseup", function() {
            $('#s').bind('blur', function () {
              $('#dBox').remove();  
            }).trigger('focus');
          });
        }
    });

    $('#s').bind('blur', function () {
      $('#dBox').remove();  
    });
});  


文章来源: Does anyone know if IE 'return false'?