有谁知道IE'返回false'?

时间:2010-11-10 00:57:43

标签: jquery internet-explorer

这个简单的测试代码适用于除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中绑定一个常规的mousedown。但同样的结果是它适用于所有浏览器,但不适用于IE 有没有人知道什么是错的?

1 个答案:

答案 0 :(得分:0)

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

  

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

假设您想在单击#dBox元素时继续关注输入,这将有效,这里是demo 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();  
    });
});