2011-04-04 101 views
1

我有jQuery的live()函數的問題。jQuery live()函數

我正在用PHP創建購物籃,並對php腳本進行json調用以將特定項添加到籃子中。而不是重新綁定點擊按鈕(標籤)我決定使用live(),但它似乎並不喜歡它。

這裏是我的電話:

if ($('.add_to_basket').length > 0) { 
    $('.add_to_basket').live('click', function() { 
     var button = $(this); 
     var id = $(this).attr("rel"); 
     $.getJSON("/basket/action/add/id/" + id, function(data) { 
      if (!data.error) { 
       $('.basket_no_of_items').text(data.no_of_items); 
       $('.basket_items_total').text(data.total); 
       button.text('Remove from the basket'); 
      }   
     }); 
     return false; 
    }); 
} 

任何想法,我可能是做錯了?

我檢查過螢火蟲,它似乎只發布請求/籃/動作/添加 - 沒有ID位。

+2

*它似乎不喜歡它*是沒有問題的描述。請更準確地解釋預期結果,實際結果以及實際結果與預期結果的不同之處。如果您遇到錯誤,請提供此錯誤的完整信息。由於這是一個提供確切的HTTP跟蹤輸入/輸出的AJAX問題,您在FireBug中看到的也可能會有所幫助。 – 2011-04-04 07:39:32

+0

它做什麼或不做什麼? – deceze 2011-04-04 07:39:49

+0

你運行'$(document).ready()'裏面的代碼嗎? – Corneliu 2011-04-04 07:48:22

回答

1

嘗試刪除「長度」檢查,我敢打賭這是干擾.live()函數。

+0

是的,無論如何,長度檢查是什麼?我看到很多人使用它,但我仍然想知道爲什麼我們需要它? – Sufendy 2011-04-04 07:59:31

+0

我不認爲它會干擾.live(),但無論如何 – Corneliu 2011-04-04 08:01:53

+0

我已經嘗試過 - 但它沒有改變任何東西 - 它只檢查元素是否在頁面上找到。 – user398341 2011-04-04 08:05:01

4

使用live()的整個想法是在創建函數時在一組元素上發生事件(例如,單擊)時註冊一個函數,而不管它們是否存在。

添加($('.add_to_basket').length > 0)將檢查這個特定的元素集是否存在。根據我上面的描述,這是反效果的。所以,無論是:

  1. 刪除($('.add_to_basket').length > 0),這應該對所有.add_to_basket元素工作
  2. 變化$('.add_to_basket').live('click', function() {...});$('.add_to_basket').click(function() {...});,並用$(document).ready()繞到它來確保當功能被註冊到點擊所有的DOM元素都裝。

希望這是有道理的。

薩米特

+0

謝謝Sumit - 我已經解決了這個問題 - 請參閱上面的註釋。 – user398341 2011-04-04 10:24:06

1

變化$.getJSON("/basket/action/add/id/" + id, function(data) {})$.getJSON("/basket/action/add/id/" ,{ pid : id}, function(data) {})