2012-02-15 15 views
1

私はclickdrag、およびresizeのイベントを適用したいdivがあります。しかし、ドラッグを終了すると、クリックイベントがアクティブになります(リサイズの終了と同じです)。誰もこれを避ける方法を知っていますか?私は要素をドラッグし、両方のdragstopclickハンドラが呼び出される終了したらイベントをクリックしてドラッグ&リサイズします。

$("#foo").click(function() { 
    //click handler 
}); 

$("#foo").draggable({ 
    stop: function() {//dragstop handler} 
}); 

$("#foo").resizable({ 
    stop: function() {//resizestop handler} 
}); 

私のコードは次のようになります。サイズ変更とクリックで同じです。どのようにこれを避けるためのアイデア?

答えて

2

マウスボタンから指を離したときに発砲すると、これをあなたの利点として利用できます。

var doClick = true; 
$("#foo").click(function() { 

    //check if the other event handlers were used, if they were then doClick will equal false and this `if` statement will resolve to false 
    if (doClick) { 
     //run code for click event handler here 
    } else { 
     //setup the flag for next-time 
     doClick = true; 
    } 
}).draggable({ 
    stop: function() { 

     //set flag to disallow click event handler 
     doClick = false; 
    } 
}).resizable({ 
    stop: function() { 

     //set flag to disallow click event handler 
     doClick = false; 
    } 
}); 

はまた、私は$('#foo')への呼び出しを変更したことに気づく:あなたは、あなたがちょうどclickイベントハンドラのコードを実行することはできませんそれらが使用されたと述べ、他のイベントハンドラにフラグを設定し、そうであれば可能要素を3回選択する必要はありません(1回だけ)。

+0

チャームのように働いた!ありがとう – Devjosh

+0

これは唯一の問題は、マウスのサイズを変更した後でマウスが要素の外に出てしまった場合(maxwidthまたはウィンドウ外に出てしまう)、次の(実際の)クリックを無効にすることです。私は$( ".ui-resizable-e")が( ":ホバー")ならば、次のクリックを防ぐだけでこれを解決しました。 –

0

私は数日前にこの問題を抱えていましたが、ここで解決しました。しかし、もしそれが最善の方法だとは思わない。基本的には、mousedownmouseupイベントを要素にバインドするので、mousedownにはクリックハンドラが無効になり、mouseupにはハンドラをレンダリングできます。おそらく、また、あなたが重複した匿名関数を使用することなく、それを参照できるように他の場所であなたのクリックコールバック関数を定義したい:

ここJSFiddle例です:clickイベントがあるhttp://jsfiddle.net/uQGMu/

var clickHandler = function() { 
    alert('clicked'); 
}; 

$("#foo").click(clickHandler); 

$("#foo").draggable({ 
    stop: function() { 
     alert('stopped dragging'); 
    } 
}); 

$("#foo").bind('mousedown', function() { 
    $('#foo').unbind('click', clickHandler); 
}); 

$('#foo').bind('mouseup', function() { 
    $('#foo').bind('click', clickHandler); 
}); 

関連する問題