这是一个部分答案的问题:
我首先开发了一个带有许多平面选择器的经典Jquery开发,但我需要开发一个" A标签"处理程序$("a").click (function.... )
来处理更复杂的案例。
处理程序以过滤器开头,该过滤器返回true,以便事件传播正常进行。
这适用于所有标准A标记,但不适用于A标记,该动作由jquery选择器使用元素名称定义:
$('#elementname').on('click' .... )
我没有成功地进行过各种测试,事件传播也没有到达Jquery选择器。
自然起作用(但不公平)的单独解决方案是按类别过滤所有其他元素,并定义包含先前存在的选择器的第二级过滤器:它是手动完成所有操作。这不是一个好的解决方案。
如何保留所有命名A标记的Jquery结构,并使用常规事件传播规则使用已定义的处理程序保存特定情况。
由于 最好的祝福 Trebly
答案 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
});
这种方式看起来很简单,但只是在简单的情况下。当有相互作用时,很难保持。