entrada de destino por tipo e nome (seletor)

132

Preciso alterar algumas entradas da caixa de seleção para entradas ocultas para algumas, mas nem todas as entradas em uma página.

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

O código de jquery abaixo seleciona apenas a entrada por tipo, o que faz com que todas as caixas de seleção sejam alteradas para entradas ocultas. Existe uma maneira de verificar os tipos de entrada = "caixa de seleção" e nome = "Código de Produto" como o seletor para que eu possa direcionar especificamente as que eu quero mudar?

$("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
fonte

Respostas:

285

Você deseja um seletor de múltiplos atributos

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

ou

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

Seria melhor usar uma classe CSS para identificar aqueles que você deseja selecionar, no entanto, muitos navegadores modernos implementam o document.getElementsByClassNamemétodo que será usado para selecionar elementos e ser muito mais rápido do que selecionar pelo nameatributo

Russ Cam
fonte
Ambos funcionaram para mim, mas eu usei o segundo método. THX, tenho outra pergunta, mas farei uma nova pergunta.
precisa saber é o seguinte
22

Você pode combinar seletores de atributos desta maneira:

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

para que um elemento precise satisfazer ambas as condições. Claro que você pode usar isso por mais de dois. Além disso, não faça [type=checkbox]. O jQuery possui um seletor para isso, ou seja :checkbox, o resultado final é:

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

No entanto, os seletores de atributo são lentos; portanto, a abordagem recomendada é usar seletores de ID e classe sempre que possível. Você pode alterar sua marcação para:

<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">

permitindo que você use o seletor muito mais rápido de:

$("input.ProductCode")...
cleto
fonte
Obviamente, isso também funciona, mas só posso dar crédito a uma pessoa pela resposta certa. :) Uma coisa que pensei é que não posso segmentar por classe porque não tenho acesso à marcação, a menos que adicione uma classe e que ponto isso faria. Mas Thx !!!
user357034
6
input[type='checkbox', name='ProductCode']

Essa é a maneira CSS e tenho quase certeza de que funcionará no jQuery.

Dani
fonte