我有一个ajax日历,它会在点击某些箭头时更改月份。出于某种原因,click事件在live()方法中不起作用。它曾经工作,但现在它不是出于某种原因。
如果我用click()替换live(),它可以工作,但我需要live()方法。
假设
的
//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(); });
我使用该代码来防止在单击无用链接时页面跳转。这样就可以在点击它们时使用href =“#”标记所有'A'标签上的传播。我删除了它,一切正常。
此外,尽管jQuery Docs说使用jQuery 1.5.2,但live()方法在DOM遍历之后工作。无论如何我继续改变它,只是为了与文档内联。但它确实有效!谢谢你的帮助!
答案 0 :(得分:3)
我认为这源于s.find
的预评估。使用此代码会给您带来不同的结果吗?
$('#s-calendar a.x-btn').live('click', function(e) {
答案 1 :(得分:1)
我怀疑这里有一些问题
s.find('a.x-btn')
实时点击不应该有任何问题。
答案 2 :(得分:1)
请参阅实时警告:http://api.jquery.com/live/#caveats
具体地:
“查找要发送到.live()的元素不支持DOM遍历方法。而应始终在选择器后直接调用.live()方法......”
答案 3 :(得分:0)
我认为问题在于:
s.find('a.x-btn')
它没有返回正确的元素。
答案 4 :(得分:0)
这可能是由于您准备好嵌套文档吗?你能删除第二个吗?
//ajax calendars
jQuery(document).ready(function($) {
//sidebar
$(function() { // remove this one
答案 5 :(得分:0)
jQuery版本>的live()函数已被删除。 1.9。 试试像, $('#button_id')。on('点击',' button_tag_type',功能) 要么 $(' body')。on('点击',' .Button_class',功能)