2010-08-05 11 views
2

Est-il possible de changer la valeur du nom d'un élément d'entrée?Modification de la valeur du nom d'entrée

Voici mon code, mais je peux définir autre chose que le nom.

$('#country').change(function(){ 
    var $country = $(this); 
    var $state = $('#state'); 
    var $county = $("#county"); 
    if($country.val() != 226){ 
     $state.attr('name', ''); 
     $state.closest('p').hide(); 
     $county.attr('name', 'user[state]'); 
     $county.closest('p').show(); 
    }else{   
     $state.attr('name', 'user[state]'); 
     $state.closest('p').show(); 
     $county.attr('name', ''); 
     $county.closest('p').hide();    

    } 
}); 

Des idées pour lesquelles définir un nom attr ne fonctionne pas?

espère que vous pouvez conseiller

+0

Vous essayez de définir son nom à rien? Quel est votre objectif ici? –

+0

Au lieu de votre approche, vous pouvez également définir le nom de l'état en tant que N/A en dehors du pays 226, ce qui est une pratique normale sur les formulaires Web. –

Répondre

2

Je prends un coup de feu dans l'obscurité ici, il semble que vous voulez éviter ces éléments de soumettre au serveur, si tel est le cas au lieu d'essayer de changer l'attribut name, vous pouvez définir le disabled attribute, comme ceci:

$('#country').change(function() { 
    var $country = $(this), $state = $('#state'), $county = $("#county"); 
    if($country.val() != 226) { 
     $state.attr('disabled', true).closest('p').hide(); 
     $county.attr('disabled', false).closest('p').show(); 
    } else { 
     $state.attr('disabled', false).closest('p').show(); 
     $county.attr('disabled', true).closest('p').hide(); 
    } 
}); 

Lorsqu'un élément de formulaire a l'attribut disabled, il ne peut pas être successful, ce qui signifie qu'il ne sera pas inclus lorsque vous l'envoyez au serveur. Donc, dans l'exemple ci-dessus, donnez simplement les deux entrées name="user[state]" dès le début, et ceci exclura celui que vous ne voulez pas du POST (ou GET) que votre <form> fait.

Il ne répond pas directement à la question, je le réalise, mais c'est une autre (je pense) façon plus simple d'éviter le problème :) Vous pouvez raccourcir encore plus en utilisant .toggle(bool) mais je pense qu'il détruit l'exemple, Je l'ai laissé non compressé ci-dessus, la version courte ressemblerait à ceci:

$('#country').change(function() { 
    var is226 = $(this).val() == 226; 
    $('#state').attr('disabled', !is226).closest('p').toggle(is226); 
    $("#county").attr('disabled', is226).closest('p').toggle(!is226); 
}); 
+0

Belle réponse nick. Je n'ai pas pensé à utiliser désactivé !!!! Beau code de la main courte aussi. Étrange mais je peux sembler mettre l'entrée à désactivé même en essayant simplement dans la fenêtre de la console. – Lee

+0

@Lee - Ne dites-vous pas que le code ci-dessus ou votre console voit l'élément comme «désactivé»? Si oui, quel navigateur? –

+0

Juste en essayant de le mettre dans la console par exemple, $ ('# county'). Attr ('disabled', false); $ ('# county'). Attr ('désactivé', vrai); Le vrai ne fonctionne pas – Lee

-1

Si je me souviens bien, c'est un bug IE. J'ai dû convertir l'obj JQuery à une chaîne, faire le changement de nom en tant que chaîne, puis créer un nouvel objet jquery autour de la chaîne html.

si

var form = $('#myForm').html(); 
form.replace('name', 'newName'); 
$('#myFormWrapper').html(form); 

changer Apparemment l'attribut name est plus difficile qu'il doit être:/

+0

Peut-être parce que IE a tendance à prendre n'importe quel attribut 'name' et à créer automatiquement des objets du même nom pointant vers cet élément DOM. –

Questions connexes