我有一个ajax日历,它会在单击某些箭头时更改月份。出于某种原因,click事件在live()方法中不起作用。它曾经工作,但现在它并没有出于某种原因。jQuery .live()与单击事件不起作用
如果我用click()替换live(),它可以工作,但我需要live()方法。
假设
- 我使用的是最新版本的jQuery。
- 没有JS错误引发。
- HTML是有效
- 的a.x-BTN选择被找到(长度= 2)
- 的console.log( '得到这个远!')被正确触发。
- console.log('Sidebar Cal Clicked')不是开火。
- 在Wordpress环境中运行。
- DOCTYPE设置为HTML5
//ajax calendars
jQuery(document).ready(function($) {
//sidebar
$(function() {
var s = $('#s-calendar'), p = s.closest('.widget');
console.log('Got this far!');
//prevent collapse
p.css('min-height', p.height());
s.find('a.x-btn').live('click', function(e) {
console.log('Sidebar Cal Clicked');
var d = $(this).attr('data-cal-date'), n = $(this).attr('data-nonce');
var url = $(this).attr('data-ajaxurl');
$.ajax({
url:url,
type:'POST',
data:'action=wpcal&sidebar=true&_wpcal_nonce='+n+'&date='+d,
success:function(data) {
s.fadeOut(500, function() {
s.html(data).fadeIn(500);
});
}
});
return false;
});
});
});
ANSWER
原来另一块JS的是造成现场无法工作。 live()方法需要事件传播才能正常工作。我在我的代码的顶部有一小段JS,有时我觉得它很有用。
$('body a[href=#]').click(function(event) { event.preventDefault(); });
我使用该代码来防止单击无用链接时页面跳跃。这会在所有'A'标签被href =“#”点击时结束传播。我删除它,一切正常。
另外,尽管jQuery Docs说了什么,使用jQuery 1.5.2,live()方法在DOM遍历之后工作。我继续改变它,只是为了与文档保持一致。但它确实有用!谢谢你们的帮助!
在我的编辑中查看答案。 – Chris 2011-04-04 19:22:12