我有一個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