2012-04-10 91 views
0

我找不到任何解决方案来让这个jQuery事件工作。jquery:live(click)ajax with one(click)event

$(window).one('click',function(){ 
    console.log('hide something'); 
    return false; 
}); 

$('a.ajax').live('click', function(e){ 
    console.log('ajax requesting'); 
    return false; 
}); 

我希望“A”元素应该做ajax请求,而不是它的默认值以及触发窗口的点击事件一次。从A的点击中删除“返回false”将触发窗口的点击,但不会阻止其第一次点击后的默认行为并继续进行非Ajax请求。

这两个处理程序都在不同的闭包,所以我不能创建一个变量来帮助它工作,而且我也不想创建一个全局变量。

从我上面的例子应该导致:
- > AJAX请求(第1点击)
- >隐藏着什么(第1点击)
- > AJAX请求(第二次点击)
- > AJAX请求(第三点击)

感谢您的帮助!

+0

我注意到你是新来的。欢迎来到StackOverflow!如果您喜欢我的回答(下面),请确保您点击旁边的“复选框”以“接受”为正确答案。 – nzifnab 2012-04-10 17:35:20

+0

是的。我刚开始在编程领域做了一些认真的爱好,并决定从Web应用程序开始。 :) ...请原谅我的英语。 – Kevin 2012-04-10 19:16:20

回答

2

在您的a事件处理程序中添加第一行e.preventDefault()(并删除返回false)。

$('a.ajax').live('click', function(e) { 
    e.preventDefault(); 
    console.log('ajax requesting'); 
}); 

“返回false”将取消所有未来事件(甚至是传播一个高达窗口),但preventDefault()方法只会阻止常规动作发生,但持续的事件链。

更多信息:jQuery e.preventDefault documentation

+0

谢谢。现在我知道返回false和preventDefault()之间的区别,许多文章都说它们是一样的。非常感谢您的帮助。 – Kevin 2012-04-10 19:05:56