2010-11-10 72 views
1

这个简单的测试代码在所有浏览器除了IE以外(在IE8测试):有谁知道如果IE'返回false'?

#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。
有没有人有任何想法是什么错?

+0

http://stackoverflow.com/editing-help – 2010-11-10 00:59:27

+1

您发布的代码实际上不会工作。你将一个松散的JavaScript块传递给'$('#s')。focus()'。这是你的实际代码吗? – 2010-11-10 01:01:31

+0

实际的代码更加复杂,但我已经在一个单独的文件中测试了上面的代码,看看我是否可以跟踪prb,但目前还没有运气。 – silversky 2010-11-10 01:04:42

回答

0

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

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

假设你想保持专注于输入#dBox元素点击该会工作的时候,这里是一个demohttp://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(); 
    }); 
}); 
+0

可以请你再次写下这些步骤(他们没有显示) – silversky 2010-11-10 02:03:52

+0

@silversky ...对不起... ...我不知道我的帖子发生了什么,但我转贴与演示。 – 2010-11-10 03:27:33

+0

也许你在FF中测试了这个演示。我知道它在工作。但我已经在所有其他浏览器中测试了演示,并且除FF之外它不工作。问题是mouseup不会触发。我尝试了同样的事情,就像你的演示在mousedown上解绑,然后在mouseup上绑定,但与现场fn绑定。 (在焦点之外)。和同样的prb。 mouseup它没有被解雇(FF除外)。我认为这是因为活的prb,但是在演示之后,我猜测那个带mouseup的prb是不同的。 – silversky 2010-11-10 12:43:30

相关问题