【问题标题】:jquery selector and events propagationjquery 选择器和事件传播
【发布时间】:2017-01-12 17:30:36
【问题描述】:

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

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

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

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

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

我已经执行了各种测试但没有成功,事件传播没有到达 Jquery 选择器。

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

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

谢谢 此致 高音

【问题讨论】:

  • 你能给我们树立一个榜样吗?
  • 你能告诉我们你的尝试吗?

标签: jquery events selector propagation


【解决方案1】:

我用另一种方式解释。我想我的解释根本不清楚。 所以我没有给出一个完整的例子,而是一个架构的简化语法:

// 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
});

有了这个&lt;a id="any" href ="&lt;an url&gt;" &gt;Got to this&lt;/a&gt;

他的选择会被解雇。

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

我的问题:

有没有办法让这样的 JQ &lt;selector&gt;.on('click'... 像其他系统事件一样处理。 然后,A 标记处理程序是一个钩子,用于对某些可识别元素单击事件执行特定操作,而无需管理所有不标准的内容。

这是一个对还是错的问题?

最好的问候

高音


注意:使用 $("a") 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
});

这种方式看似简单,但仅限于简单的情况。当有互动时,它会变得难以保持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2015-04-14
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多