/ / IEが「falseを返す」かどうか誰か知っていますか? --jquery、Internet-Explorer

誰かがIEが「偽を返す」かどうか知っていますか? - jquery、インターネットエクスプローラ

この単純なテストコードは、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では機能しません。
誰かが何が悪いのか考えていますか?

回答:

回答№1は0

これは、イベントの委任が直接原因です。 jQuery live() liveを使用してイベントをバインドしても、直接要素はバインドされません。代わりに、ドキュメントのルートノードにハンドラーをアタッチします。

。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();
});
});