有谁知道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(); }); });