有谁知道IE’返回false’?

这个简单的测试代码适用于IE以外的所有浏览器(在IE8中测试):

#dBox { height:100px; width: 230px; overflow-y:auto; } $(function () { $('#s').focus(function(){ $(this).after('
    '); for (i=0;i<10;i++) $('#dBox').append('
  • '+i+'
  • '); }); $('#dBox').live('mousedown',function(event) { //event.stopPropagation(); //event.preventDefault(); //console.log (event.isDefaultPrevented()); //event.stopImmediatePropagation(); return false; }); $('#s').blur(function () { $('#dBox').remove(); }); });

    我已经尝试了现场fn的所有选项,但没有运气。
    event.isDefaultPrevented()它返回true,但#dBox仍然被删除。
    我甚至试图在焦点fn中绑定一个常规的mousedown。 但同样的结果是它在所有浏览器中工作,但不适用于IE。
    有没有人知道什么是错的?

    这是直接因为使用live的jQuery live()绑定事件的事件委派不绑定直接元素。 相反,它在文档的根节点上附加处理程序。

    .live()方法能够通过使用事件委托来影响尚未添加到DOM的元素:绑定到祖先元素的处理程序负责在其后代上触发的事件。 传递给.live()的处理程序永远不会绑定到元素; 相反,.live()将一个特殊的处理程序绑定到DOM树的根。 在我们的示例中,单击新元素时,会发生以下步骤:

    假设您想在单击#dBox元素时继续关注输入,这将起作用,这是一个演示 http://www.jsfiddle.net/WurDE/

    注意:如果您不想保持对输入trigger('focus')从代码中删除trigger('focus')

     $(function () { $('#s').focus(function(){ if (!$('#dBox').length) { var $dbox = $('
      '); for (i=0;i<10;i++) $dbox.append('
    • '+i+'
    • '); $(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(); }); });