2011-07-12 10 views
8

こんにちは、私はフォームのdivを持っています。マウスをdivから外したときに無効にするクリックイベントが必要です。だから私はこれを試してみましたが、まだ動作していません。何か案が??divの範囲外でマウスがクリックされないようにする

var flag = false; 
$("#foo").live("mouseenter",function(){ 
    flag = true; 
}).live("mouseleave",function(){ 
    flag = false; 
}) 

$(document).click(function(){ 
    if(!flag) 
     return false; 
}); 
+0

なぜフォーム外でクリックを無効にする必要がありますか?あなたは何を達成したいですか? –

+0

divの外側をクリックして無効にするとどういう意味ですか? – ShankarSangoli

+0

divを表示するとdivを表示します。このdivが表示されている場合、divの以外はクリック可能になりません。 –

答えて

6

クリックイベントがドキュメント全体から発生するのを防ぐことはできません。あなたは要素ごとにそれを行うことができます。おそらく絶対配置された透明な(不透明度の低い)divを使って画面全体をブロックし、divが見えるようにしたら再び隠すことができます。

var $body = $(document.body); 
var $div = $("<div id='dummyDiv'/>").hide().appendTo($body); 
$div.css({position:"absolute", height: $body.height(), width: $body.width(), background: "#000", opacity: 0.5}).show(100); 

//to hide it 
$("#dummyDiv").hide(100); 
+0

クリックイベントがドキュメント全体から発生するのを防ぐことができます。http://stackoverflow.com/a/8596014/931358 – Jurik

+0

+1。オーバーレイを追加すると、クリックイベント処理の問題は無関係になります。 –

0

falseを返す使用のisteadので、あなたは、単にこれを行うことができれば、私はあなたが#foo代わりのdocumentにクリックをしたいと思いますe.preventDefault http://css-tricks.com/6809-return-false-and-prevent-default/

+0

彼らは同じことを行う – locrizak

+3

@locrizak - 彼らはまったく同じ事をしない、全くしない。 1つは、デフォルトのアクションを防止します.1つは、トラック内のイベントを停止し、伝播も停止します。それらが同じであると言うことは全く間違っています。 –

+0

私はまたそれを試みたが、あまりにも働いていない。 –

1
$("#foo").live("mouseenter",function(){ 
    $(document).bind('click', onDocumentClick); 
}).live("mouseleave",function(){ 
    $(document.unbind('click'); 
}); 

function onDocumentClick(e){ 

}; 

を使用します。

$('#foo').click(function(){ 

});

要素をクリックするとロールオーバーする必要があるので、これは正常に動作します。

+0

私はonDocumentClick funcでfalseを返し、e.preventDefault()を返しましたが、どちらもうまくいきませんでした。 –

+0

あなたは正確に何をしようとしていますか? – locrizak

関連する問題