2010-10-09 13 views
5

Mam następujący kod, a checkb zaczyna się od checkb01 do chekb342.Pobierz attr ('id') z <td> przy użyciu jQuery

<tr> 
    <td class="specs_under">Specs</td> 
    <td id="checkb77" class='checkb'><input type="checkbox" id="add_remove77" class="change_image77"/></td> 
    <td class="specs_under_value" id="specs_unit77">1</td> 
    <td rowspan="13" class="specs_under_value" id="specs_itempr77">15</td> 
    <td class="specs_under_value" id="specs_quantity77">&nbsp;</td> 
    <td class="specs_under_value" id="specs_packageprice77">0.125</td> 
</tr> 

Próbowałem przy użyciu tego kodu

$(document).ready(function(){ 
    $(".checkb").toggle(function() { 
     var cid = $(this).attr('id'); 
     alert('id'); 

    },function() { 
     alert('checkbox unchekced'); 

    } 

Jak uzyskać wartość id w <td> odpowiedniego wyboru kliknięć przy użyciu jQuery

Dzięki Jean

Chłopaki muszę aby uzyskać wartość identyfikatora po kliknięciu tego pola wyboru, a nie o polu wyboru id:

+0

Dlaczego idziesz za id TD a nie samych wyboru? – Lazarus

+0

Ponieważ muszę uzyskać wartości z dalszych td, tak czy inaczej nie daje mi wartości (attr ('id')). – X10nD

Odpowiedz

8
$(':checkbox').toggle(function() { 
    var cid = $(this).attr('id'); 
    alert(cid); 
}, function() { 
    alert('checkbox unchekced'); 
}​);​ 
+0

Mogłem to zrobić. Muszę skopiować/wkleić to 342 razy dla każdego – X10nD

+2

Nie, nie musisz tego robić. –

+0

@darin przepraszam, działa dobrze, dzięki ....... jego proste wystarczy ... – X10nD

1

można uzyskać wartości, albo dołączenie obsługi zdarzeń bezpośrednio na pole wyboru (toggle() automatycznie anuluje domyślne sprawdzanie działania, więc używamy change() tutaj):

$('.checkb :checkbox').change(function(){ 
    if(this.checked){ 
     // Do somethin' 
     alert(this.id); 
    } else { 
     // Do something else 
     alert('Unchecked!'); 
    } 
}); 

Jeśli naprawdę chcesz używać toggle, ten kod działa, nieco:

$(".checkb").toggle(function() { 
    var cid = $(this).children(':checkbox').attr('id'); 
    alert(cid); 
}, function() { 
    alert('checkbox unchekced'); 
}); 

Jednakże, ze względu na zwłokę powyższy odwołania akcji , pole wyboru nie może być zaznaczone.

+0

Mogę uzyskać zaznaczenie tego checkboxa w porządku, ale jest to attr ("id") Nie mogę uzyskać – X10nD

+0

@Jean http://www.jsfiddle.net/yijiang/CeFPh/ Możesz zobaczyć zachowanie, o którym mówię. W przeciwnym razie nie jestem całkowicie pewien, co chcesz tutaj –

+0

@yi span jest w porządku, ale chcę to zrobić w tabeli. – X10nD

1

Najprostszy sposób mogę myśleć teraz jest dodanie rel atrybut dla tagu wejściowego oraz identyfikator znacznika tr jak:

<tr id="row77"> 
    <td class="specs_under">Specs</td> 
    <td id="checkb77" class='checkb'><input type="checkbox" id="add_remove77" class="change_image77" rel="row77"/></td> 
    <td class="specs_under_value" id="specs_unit77">1</td> 
    <td rowspan="13" class="specs_under_value" id="specs_itempr77">15</td> 
    <td class="specs_under_value" id="specs_quantity77">&nbsp;</td> 
    <td class="specs_under_value" id="specs_packageprice77">0.125</td> 
</tr> 

a następnie użyć:

<script type="text/javascript"> 
    $('checkbox:checked').each(function() { 
     var id = $(this).attr('rel').substr(3,$(this).attr('rel').length); // 77 
     var specs_packageprice = $('#'+$(this).attr('rel')+' #specs_packageprice'+id).html(); //0.125 
     // More code... 
    } 
</script> 

Też myślę, że możesz uprościć to dużo ...

1

Jeśli używasz jquery 1.4.2 (najnowsza wersja, myślę), rozważałbym użycie delegate(). Coś takiego:

$(function() { 
    $("table").delegate(":checkbox", "click", function() {alert($(this).attr("id");}) 
}) 

Oczywiście, możesz zrobić, co chcesz w obsłudze kliknięcia.

Delegat nie dołącza do tabeli zawierającej wszystkie pola wyboru. Za każdym razem, gdy zostanie kliknięty element wejściowy w tabeli, program obsługi zostanie uruchomiony. Jeśli masz inne dane wejściowe w tabeli, musisz sprawdzić, czy masz element, który chcesz. Możesz sprawdzić, czy pole jest typu. Zalecam podanie identyfikatora tabeli i zastąpienie "tabeli" identyfikatorem w powyższym.

Alternatywnie można dołączyć obsługę kliknięcia do każdego wejścia w tabeli, ale to prawdopodobnie nie będzie łatwiejsze i prawdopodobnie będzie wolniejsze.

Wreszcie, jeśli nie używasz 1.4.2, ale używasz co najmniej 1,3, możesz użyć funkcji live() zamiast delegata.

2

Jeśli próbujesz uzyskać identyfikator załączającego się td (nie samego pola wyboru), rozważ użycie funkcji .closest().

ex:

$(':checkbox').change(function(){ 
    var id = $(this).closest('td').attr('id'); 
    alert(id + ' : ' + this.checked); 
});