jQuery を多用するユーザー エクスペリエンスが少しあります。クリック ターゲットが 1 つの項目であり、別の項目ではない場合にのみ、特定のダイアログ ボックスが開くようにするのに問題があります。
基本的に、「テキストの編集」ダイアログが表示されるのは、ユーザーがクラスのある div .textbox
(たまたま#content
div にある) をクリックしたときだけであり、ユーザーがインスタンス化されたインスタンスの一部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)
ただし、クリックがcontent
divの外やツールバーで発生した場合でも、カウントされるため、doStuff()
常にトリガーされます。したがって、クリックがテキストボックスではなくTinyMCEツールバーで行われたことを検出するのに役立つ条件はないようです。
textbox
クリックがdivに直接ある場合にのみクリックが機能をトリガーし、それ以外の場合はトリガーしないようにするにはどうすればよいですか?