我用另一种方式解释。我想我的解释根本不清楚。
所以我没有给出一个完整的例子,而是一个架构的简化语法:
// 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 标记处理程序是一个钩子,用于对某些可识别元素单击事件执行特定操作,而无需管理所有不标准的内容。
这是一个对还是错的问题?
最好的问候
高音
注意:使用 $("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
});
这种方式看似简单,但仅限于简单的情况。当有互动时,它会变得难以保持。