2012-01-08 9 views
7

Mam live() funkcję w moim jQuery poniżej:Jak zmienić swój kod z .live(), aby .Na()

$("#qandatbl td.weight input").live("change", calculateTotal); 

function calculateTotal() 
{ 
    var totalweight = hundred; 
    $("#qandatbl td.weight input").each(function (i, elm){ 
     totalweight = totalweight - parseInt($(elm).val(), 10); 
    }); 

    $("#total-weight").text(totalweight).append('%').css('font-weight', 'bold'); 
} 

Teraz niektórzy mówią, że funkcja live() zwalnia zanika i że lepiej jest użyć funkcji on(). Jeśli to prawda, to w jaki sposób mogę zmienić powyższy kod na on() zamiast funkcji live()? Czy to ważne, że nie używam live(), czy to naprawdę nie ma większego znaczenia?

Odpowiedz

9

Według documentation:

przepisanie sposób .live() pod względem następców jest proste; Są to szablony dla równoważnych wezwań do wszystkich metod mocowania trzy zdarzenia:

$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 

Więc w twoim przypadku, jeśli używasz jQuery 1.7+, byłoby:

$(document).on('change', '#qandatbl td.weight input', calculateTotal); 
+0

Dziękuję :) najlepsza odpowiedź: – BruceyBandit

+0

powinieneś zaakceptować swoją odpowiedź, jeśli to prawda. :) – redmoon7777

+2

Zwróć też uwagę, że najlepiej nie użyjesz '$ (document)' do skonfigurowania swojego handlera: chociaż to jest właśnie to, co '.live()' lepiej używasz najbliższego elementu rodzica do rzeczywistego celu element (y), który możesz tak długo, jak ten rodzic istnieje w czasie twojego wywołania do '.on()'. (Prawdopodobnie twój "#qandatbl" element?) – nnnnnn

Powiązane problemy