jquery选择器和事件传播

时间:2017-01-12 17:30:36

标签: jquery events selector propagation

这是一个部分答案的问题:

我首先开发了一个带有许多平面选择器的经典Jquery开发,但我需要开发一个" A标签"处理程序$("a").click (function.... )来处理更复杂的案例。

处理程序以过滤器开头,该过滤器返回true,以便事件传播正常进行。

这适用于所有标准A标记,但不适用于A标记,该动作由jquery选择器使用元素名称定义:

$('#elementname').on('click' .... )

我没有成功地进行过各种测试,事件传播也没有到达Jquery选择器。

自然起作用(但不公平)的单独解决方案是按类别过滤所有其他元素,并定义包含先前存在的选择器的第二级过滤器:它是手动完成所有操作。这不是一个好的解决方案。

如何保留所有命名A标记的Jquery结构,并使用常规事件传播规则使用已定义的处理程序保存特定情况。

由于 最好的祝福 Trebly

1 个答案:

答案 0 :(得分:0)

我以另一种方式解释。我想我的解释根本不清楚。 所以我不提供一个完整的例子,但是该架构的简化语法是:

// html 
<a id="elementId1" .... ></a>
<a id="elementId2" .... ></a>
<a id="elementId3" .... ></a>
<a id="elementId4" .... ></a>

// JQuery
$('#elementId1').on('click', f1() )
$('#elementId2').on('click', f2() )
$('#elementId3').on('click', f3() )
$('#elementId4').on('click', f4() )

$("a").on('click', function() {
     var $id = $(this).get(0).hash;
     if ( $id.indexOf("element") >= 0 ) return true;
     if  ( $id.indexOf("someothers") >= 0 ) {
          do something special
     }
     // remaining cases
     return true; // end bubbling then goto standard system events management
});

使用此<a id="any" href ="<an url>" >Got to this</a>

将以他的选择解雇。

如果没有$("a").on...处理$('#elementId1').on('click' .... )。 但是当设置$("a").on(click....时,这些JQ处理程序不再是捕获。 JQ为这些id设置的事件不再处理(系统与A标签关联的点击事件被JQ设置的事件遗忘 - 隐藏)。

我的问题:

是否应该将此类JQ <selector>.on('click'...作为其他系统事件处理。 然后,A标记处理程序是一个钩子,用于对某些可识别元素单击事件执行特定操作,而不管理所有非标准元素。

这是真的还是错的?

祝你好运

Trebly

注意:使用$(&#34; a&#34;)JQ对象并保存在整个层次结构中的解决方案自然会起作用:

$("a").on('click', function() {
     var $id = $(this).get(0).hash;
     if ( $id.indexOf("element") >= 0 ) {
         if ($id.indexOf("element1") >= 0 ) { f1() }
         else if  ($id.indexOf("element2") >= 0 ) { f2() }
         else if  ($id.indexOf("element3") >= 0 ) { f3() }
         else if  ($id.indexOf("element4") >= 0 ) { f3() }
     }
     if  ( $id.indexOf("someothers") >= 0 ) {
          do something special
     }
     // remaining cases
     return true; // end bubbling then goto standard system events management
});

这种方式看起来很简单,但只是在简单的情况下。当有相互作用时,很难保持。