2009-08-29 6 views
0

HI! J'ai un problème avec le changement du nom d'un élément select. J'ai environ 28 éléments sélectionnés générés sur la page. Chacun de ces éléments sélectionnés a reçu le nom "dropdown". J'utilise ce nom pour calculer le total en fonction de l'option sélectionnée. Mais quand je passe cette information à une page php, elle montre seulement le dernier élément de sélection. Pour surmonter cela, j'ai besoin d'avoir tous les tags de sélection étiquetés comme "dropdown []" onsubmit. C'est parce que j'ai besoin de "dropdown" pour javascript pour le lire et j'ai besoin de "dropdown []" pour php pour le traiter.Comment changer le nom d'un élément html select en utilisant javascript et seulement le nom des tags auxquels faire référence?

<select name="dropdown"> 
<option> 
<option> 
<option> 
</select> 

devrait être remplacé:

<select name="dropdown[]"> 
    <option> 
    <option> 
    <option> 
    </select> 

tout en validant le formulaire à la fin. Comment je m'en occupe? Je n'utilise pas les identifiants avec le nom, parce que je pense que cela pourrait le rendre complexe.

+0

Je ne suis pas certain de ce que vous essayez de faire. Vous avez 28 éléments sélectionnés, et vous voulez changer le nom à quelque chose de différent? Est-ce que tous les 28 auraient le même nom? –

+0

ouais .. ils le feraient .. comme je l'ai dit c'est parce que javascript et php les veulent différemment. – user165242

Répondre

1

Je vous recommande de rester avec le nom « dropdown [] », vous pouvez utiliser la fonction getElementsByName, qui vous renvoie un tableau que vous pouvez itérer, des éléments avec le nom donné dans le document:

var dropdownArray = document.getElementsByName('dropdown[]'), 
    i, element, n = dropdownArray.length; 

for (i = 0; i < n; i++) { 
    element = dropdownArray[i]; 
    // you can check the value of each element here... 
} 

Edit: Modifier votre code:

function addup(){ 
    var tot = 0, i, // i declaration was missing 
     dropdowns = document.payment.elements['dropdown[]']; 

    for(i = 0;i<dropdowns.length;i++) { 

    //alert(i); 
    var find = dropdowns[i]; 
    var check = find.options[find.selectedIndex].value; 
    //alert(check); 

    if(check.substring(0,3)=='pay') { 
     // not using eval anymore 
     var tot1 = document.payment.elements[check.substring(4)+'_amount'].value; 
     //alert(tot1); 
     tot += +tot1; // unary plus operator to convert to number 
    } 
    document.payment.total_amount.value=tot; 
    calcTotal(); 
    } 
} 
+0

qui l'a fait! et vous avez enlevé l'évaluation aussi! merci un million. – user165242

+0

De rien, rappelez-vous qu'il existe presque toujours un moyen d'éviter d'utiliser eval ... http://jslint.com/lint.html#evil – CMS

0

Je pense que vous vous approchez de ce faux problème. Vous devriez probablement utiliser "id" pour identifier les éléments de façon unique. Ensuite, vous pouvez utiliser l'une des nombreuses bibliothèques disponibles gratuitement (jQuery, requête dojo, ....) pour vous fournir un moyen plus agréable de sélectionner des éléments de la page. Soit en donnant vos noms de classes d'éléments spécifiques, soit en trouvant simplement tous les éléments "select" sur la page.

Je ne comprends absolument pas pourquoi «[]» à la fin du nom ferait une différence pour vous. Mais je ne suis pas familier avec php.

+0

J'ai environ 28 éléments sélectionnés.Si je ne rajoute pas le [] après la liste déroulante, php va juste prendre le dernier élément (28ème) et laisser le reste. – user165242

+0

Son comme il doit être notifié qu'il y aurait des étiquettes avec le même nom, et construira un tableau pour cela. – user165242

0

En utilisant cette case parce que je pouvais afficher le code.

Si je peux nommer l'élément comme « dropdown [] » Je recevrais une erreur comme dans ce cas: -

function addup(){ 
var tot=0; 
for(i=0;i<(document.payment.dropdown.length);i++) 
    { 
     //alert(i); 
     var find=document.payment.dropdown[][i]; 
     var check=find.options[find.selectedIndex].value; 
     //alert(check); 

        if(check.substring(0,3)=='pay') 
        { 
        var other="document.payment."+check.substring(4)+"_amount.value"; 
        var tot1=eval(other); 
        //alert(tot1); 
        tot+=parseInt(tot1); 

        } 

        document.payment.total_amount.value=tot; 
        calcTotal(); 


    } 

} 

Pardon le code minable, mais cela ne marche pas semble fonctionner si je nomme comme "menu déroulant[]". Donc j'ai besoin que le nom soit "dropdown" au début et ensuite il devrait changer en "dropdown []" onsubmit.

0

Je viens de trouver votre question.

Pourquoi suffit d'ajouter un identifiant (par exemple « itsID ») tag à votre sélection et puis pointez à changer son nom avec:

var ref = document.getElementById('itsID'); 
     ref.name = "dropdown[]"; 

Il travaille pour moi avec ref.

Questions connexes