Mam następujący kod

$(document).ready(function() {

//  When change the value in select it will send id to controller in order to return the price of service.
$(".select-service").change(function(){
    var element_id = $(this).attr('id');
    $.post("/services/get_price_of", {
        message: this.value
    },
    function(data){
        $("#" + element_id).parent().find(".price-input").val(data);

    })
});

});

Strona jest ładowana z jednym zaznaczeniem, ale mogę dodać więcej zaznaczeń dynamicznie. Problem polega na tym, że dla wszystkich wybranych dynamicznie dodanych zdarzeń zdarzenie wcześnie nie działa. Czy ktoś może mi pomóc?

Pozdrowienia.

P.D: przepraszam za mój słaby angielski.

1
Cristhian Boujon 3 marzec 2012, 07:43

2 odpowiedzi

Najlepsza odpowiedź

Użyj jquery on

http://api.jquery.com/on/

$(document).ready(function() {

    $("select").on("change", ".select-service", function(event){
         var element_id = $(this).attr('id');
        $.post("/services/get_price_of", {
            message: this.value
        },
        function(data){
            $("#" + element_id).parent().find(".price-input").val(data);

        })
    });
});

Od wersji jQuery 1.7 metoda .live() jest przestarzała

0
Shyju 3 marzec 2012, 07:46

Możesz użyć delegowania zdarzeń za pomocą on() i jego parametru selector. Na przykład, aby przechwycić wszystkie kliknięcia elementów p w #container (nawet elementy p dodane po dołączeniu detektora zdarzeń), możesz użyć tego kodu:

$("#container").on('click', 'p', function() {
    $(this).css('color', 'red');
});

Dodatkowo, chociaż nie jest to związane z Twoim problemem, bardziej eleganckie podejście do wykorzystania celu zdarzenia w wywołaniu zwrotnym jest następujące:

var self = $(this);
someFunction(function() {
    self.css('color', 'red');
});
0
icktoofay 3 marzec 2012, 07:50