0

jQuery を多用するユーザー エクスペリエンスが少しあります。クリック ターゲットが 1 つの項目であり、別の項目ではない場合にのみ、特定のダイアログ ボックスが開くようにするのに問題があります。

基本的に、「テキストの編集」ダイアログが表示されるのは、ユーザーがクラスのある div .textbox(たまたま#contentdiv にある) をクリックしたときだけであり、ユーザーがインスタンス化されたインスタンスの一部tinyMCE(そのオプションなど) をクリックしたときではありません。等)。tinyMCE をセットアップして、有効にするとツールバーが に表示されるようにしました#externalToolbarWrapper

これは私のコードです:

    // check if the click's target element is parented by a textbox or mceLayout.
    var $etextbox = $(e.target).closest('.textbox');
    var $etoolbar = $(e.target).closest('.mceLayout');

if($etextbox.length==1 && $etoolbar.length == 0) // only the text parent and not toolbar is clicked
{
         doStuff();
}

ただし、このコードを使用すると、クリックがボックスの外側や TinyMCE ツールバーの一部 (フォントやサイズの変更など) でdoStuff行われた場合でもトリガーされます。contentそこで、さらにいくつかの可能性を追加してみました:

    var $eformat = $(e.target).closest('#externalToolbarWrapper');
    var $econtent = $(e.target).closest('#content');

そして、コンソールに出力します:

console.log("textbox: " + $etextbox.length);
console.log("etoolbar: " + $etoolbar.length);
console.log("eformat: " + $eformat.length);
console.log("econtent: " + $econtent.length);

しかし、TinyMCE ツールバーをクリックすると、次の結果が得られます。

etextbox: 0 
etoolbar: 0 
emenu: 0 
eformat: 0 
econtent: 1 

そして、追加のチェックを試みました:

if($etextbox.length==1 && $etoolbar.length == 0 && $etoolbar.length==0 && $eformat.length==0)

ただし、クリックがcontentdivの外やツールバーで発生した場合でも、カウントされるため、doStuff()常にトリガーされます。したがって、クリックがテキストボックスではなくTinyMCEツールバーで行われたことを検出するのに役立つ条件はないようです。

textboxクリックがdivに直接ある場合にのみクリックが機能をトリガーし、それ以外の場合はトリガーしないようにするにはどうすればよいですか?

4

1 に答える 1

0

e.pageX最後に、座標と座標をチェックし、それらがdive.pageY内にないことを確認するだけで、この問題を解決しました。#contentそのため、クリックがコンテンツの外側にある場合、トリガーされませんでしたdoStuff()

于 2013-06-08T08:40:06.527 に答える