此代码:
$(document).ready(function(){
$('body')。click(function(evt){
if(evt.target.nodeName ==='A'&& $(evt.target).hasClass('cross-link')) {
$( '一个[HREF =#2]')触发( '点击');
}});});
给我和“太多递归”的错误
有人可能会认为我应该只将一个处理程序附加到交联元素上。我试过这个,但我无法让它工作,因为DOM在创建交叉链接类元素之前加载。我需要做些什么才能解决这个问题,或者您是否应该更好地了解我应该采取哪些措施来实施我想要做的事情?
如果您想亲自查看错误,请访问eataustineat.com/testfolder/ 在搜索字段中输入“d” 选择全能的狗(这是你应该注意到“过多的递归错误”的地方 它会将div向左移动,但它会非常缓慢地移动。
答案 0 :(得分:2)
您可以使用live
或delegate
为稍后创建的元素添加侦听器:
$("a.cross-link").live("click", function()
{
$('a[href=#2]').trigger('click');
window.location.hash = "#2";
});
但是,click不会触发转到URL的默认事件,因此您需要手动执行此操作。
答案 1 :(得分:1)
如果在创建文档后添加了需要现有事件的元素,则可以使用实时
$(document).ready(function() {
$('.cross-link').live(function() {
$('a[href=#2']).click(); //No cross-link class allowed on this element as it is responsible for the recursion
});
});
答案 2 :(得分:0)
这个递归来自触发
$('a[href=#2]').trigger('click');
当从事件中单击此元素时,它会抛出另一个事件,该事件将由相同的代码处理,依此类推。
这应该有效:
$(document.ready)(function(){
$('.cross-link').click(function(){
#('a[href=#2').click();
});
});
同样在性能方面,将ID添加到第二个链接更为理想,因为通过id选择比通过属性选择更快。如果您仍然希望选择href,并且只有一个这样的链接:
#('a[href=#2 :first').click();
答案 3 :(得分:0)
为了参考我上面的评论,我就是这样做的。我推荐使用live tho ...
var open = function (myObj, animationTime) {
//do stuff
$(myObj).unbind('click');
$(myObj).click(function () {
close(myObj, timer);
});
}
var close = function (myObj, animationTime) {
//dostuff
//remove close click event and then rebind the click event to open
$(myObj).unbind('click');
$(myObj).click(function () {
open(myObj, timer);
});
}
$(".mySelector").click(function () {
open($(this), timer);
});
答案 4 :(得分:0)
$('body').click(function(evt) {
if(evt.target.nodeName === 'A' && $(evt.target).hasClass('cross-link')) {
$('a[href=#2]').trigger('click');
}
});
您错过了else
声明的if-else
。