0

ノード名表示 (UL) リストにマウスを合わせるツリー構造があります。リスト内の各項目には、クリック イベントが関連付けられています。私が直面している問題は、リスト内の子アイテムをクリックすると、親スパンに関連付けられたマウスオーバー イベントが発生することです。この問題を解決する方法を教えてください。

<span id="treeNodeText">
<ul><li id="firstItem">First Item</li></ul>
</span>

私のコードは次のようなものです:私はconmanイベントアタッチメソッドを持っています:

attachEvents(domId,eventType,callBackFunction,otherParams)

attachEvent 関数では、イベントを dom id にアタッチし、適切なコールバック関数を割り当てます。

4

3 に答える 3

1

クリックする前にイベントmouseoverが発生します。したがって、遅延を除けば、その処理を防ぐことはできません。

これに対処する1つの方法は次のとおりです。

var timer;
document.getElementById("treeNodeText").addEventListener('mouseover', function(){
    clearTimeout(timer);
    timer = setTimeout(function(){
       // handle mouseover
    }, 400); // tune that delay (depending on the sizes of elements, for example)
});
document.getElementById("firstItem").addEventListener('click', function(){
    clearTimeout(timer); // prevents the mouseover event from being handled
    // handle click
};
于 2013-10-07T08:44:55.957 に答える
1

JavaScript では、イベントが DOM をバブルアップします。詳しくは、イベントの順序と伝播またはpreventDefault/stopPropagationをお読みください。

要するに、イベントのバブリングを防ぐことができます

function callBackFunction(event){
  event.stopPropagation()
}

また

function callBackFunction(event){
  return false
}

return falseデフォルトの動作を防ぐ効果もあるため、技術的には次と同等です。

function callBackFunction(event){
  event.stopPropagation()
  event.preventDefault()
}
于 2013-10-07T09:07:44.280 に答える
0
function myfunction(e){
  e.stopPropagation()
 e.preventDefault()
}

これは役立ちます

于 2013-10-07T09:11:23.043 に答える