docelowe dane wejściowe według typu i nazwy (selektor)

136

Muszę zmienić niektóre pola wyboru na ukryte dane wejściowe dla niektórych, ale nie wszystkich danych wejściowych na stronie.

<input type="checkbox" name="ProductCode"value="396P4"> 
<input type="checkbox" name="ProductCode"value="401P4"> 
<input type="checkbox" name="ProductCode"value="F460129">

Poniższy kod jquery wybiera dane wejściowe tylko według typu, co powoduje zmianę wszystkich pól wyboru na ukryte dane wejściowe Czy istnieje sposób na sprawdzenie zarówno typu input = "pole wyboru", jak i name = "ProductCode" jako selektora, abym mógł na nie wskazać że chcę zmienić?

$("input[type='checkbox']").each(function(){
var name = $(this).attr('name'); // grab name of original
var value = $(this).attr('value'); // grab value of original
var html = '<input type="hidden" name="'+name+'" value="'+value+'" />';
$(this).after(html).remove(); // add new, then remove original input
});

user357034
źródło

Odpowiedzi:

290

Potrzebujesz selektora wielu atrybutów

$("input[type='checkbox'][name='ProductCode']").each(function(){ ...

lub

$("input:checkbox[name='ProductCode']").each(function(){ ...

Lepiej byłoby użyć klasy CSS do zidentyfikowania tych, które chcesz wybrać, jednak wiele nowoczesnych przeglądarek implementuje document.getElementsByClassNamemetodę, która będzie używana do wybierania elementów i będzie znacznie szybsza niż wybieranie przez nameatrybut

Russ Cam
źródło
Oba działały dla mnie, ale użyłem drugiej metody. THX, mam inne pytanie, ale zadam nowe pytanie.
user357034,
22

Możesz łączyć selektory atrybutów w ten sposób:

$("[attr1=val][attr2=val]")...

tak, że element musi spełniać oba warunki. Oczywiście możesz używać tego przez więcej niż dwie osoby. Nie rób też tego [type=checkbox]. jQuery ma do tego selektor, :checkboxwięc wynik końcowy to:

$("input:checkbox[name=ProductCode]")...

Selektory atrybutów są jednak powolne, dlatego zalecanym podejściem jest użycie selektorów identyfikatorów i klas tam, gdzie to możliwe. Możesz zmienić swój znacznik na:

<input type="checkbox" class="ProductCode" name="ProductCode"value="396P4"> 
<input type="checkbox" class="ProductCode" name="ProductCode"value="401P4"> 
<input type="checkbox" class="ProductCode" name="ProductCode"value="F460129">

co pozwala na użycie znacznie szybszego selektora:

$("input.ProductCode")...
cletus
źródło
Oczywiście to również działa, ale tylko jednej osobie mogę przypisać właściwą odpowiedź. :) Jedna rzecz jest taka, że ​​nie mogę kierować na klasę, ponieważ nie mam dostępu do znaczników, chyba że dodam klasę i jaki miałoby to sens. Ale dzięki !!!
user357034,
6
input[type='checkbox', name='ProductCode']

To jest sposób CSS i jestem prawie pewien, że będzie działać w jQuery.

Dani
źródło