2010-10-13 12 views
0

Tout ce que je veux faire (et ce serait assez facile avec PHP, mais je me pousse à apprendre plus de javascript et jQuery et front end coder maintenant en modifiant les scripts pour comprendre ce qu'ils font) est de construire un formulaire avec le même nombre de lignes que la variable "Sièges" stipule à partir d'un formulaire précédent. Ensuite, le déclarant peut entrer les noms des invités qu'ils apportent. J'essaie d'utiliser la fonctionnalité cloneNode. Mais je n'arrive pas à comprendre ce qui se passe ici assez pour comprendre comment stipuler le nombre de lignes créées sans utiliser le bouton de forme Ajouter une ligne contenu dans ce script.Chargement d'un formulaire avec des lignes de texte d'entrée égales à un nombre de variable passé en utilisant la fonction clone

Voici le code avec lequel je travaille. Je veux juste un nom de variable "sièges" pour égaler le nombre de lignes créées. Merci !:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 

<head> 

<title>Guest Registration</title> 

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 

<meta http-equiv="Content-Style-Type" content="text/css"> 

<meta http-equiv="Content-Script-Type" content="text/javascript"> 

<script type="text/javascript"> 

var clone; 

function addRow(but){ 

var tbo=but.parentNode.parentNode.parentNode; 

tbo.appendChild(clone); 

var rows=tbo.getElementsByTagName('tr'); 
textAreas = getVar("seats"); 

clone=rows[rows.length-1].cloneNode(true); 

orderNames(rows) 

} 

function removeRow(but){ 

var thisRow=but.parentNode.parentNode; 

var tbo=thisRow.parentNode; 

tbo.removeChild(thisRow); 

var rows=tbo.getElementsByTagName('tr'); 

orderNames(rows) 

} 

function orderNames(rows){ 
var r = 4; 
var i=0,r,j,inp,t,k; 


    while(r=rows[i++]){ 

     inp=r.getElementsByTagName('input');j=0;k=1; 

     while(t=inp[j++]){ 

     if(t.type=="text"){t.name='col_'+k+'_row_'+i;k++;} 

     } 

    } 

} 

/*onload=function(){ 


clone=document.getElementById('mytab').getElementsByTagName('tr')[0].cloneNode(true) 

}*/ 

function getVar(name) 
     { 
     get_string = document.location.search;   
     return_value = ''; 

     do { //This loop is made to catch all instances of any get variable. 
      name_index = get_string.indexOf(name + '='); 
      //alert (name); 

      if(name_index != -1) 
       { 
       get_string = get_string.substr(name_index + name.length + 1, get_string.length - name_index); 

       end_of_value = get_string.indexOf('&'); 
       if(end_of_value != -1)     
       value = get_string.substr(0, end_of_value);     
       else     
       value = get_string;     

       if(return_value == '' || value == '') 
       return_value += value; 
       else 
       return_value += ', ' + value; 
       } 
      } while(name_index != -1) 

     //Restores all the blank spaces. 
     space = return_value.indexOf('+'); 
     while(space != -1) 
       { 
       return_value = return_value.substr(0, space) + ' ' + 
       return_value.substr(space + 1, return_value.length); 

       space = return_value.indexOf('+'); 
       } 

     return(return_value);   
     } 



</script> 

</head> 

<body> 

<form action=""> 
<script> 
onload=function(){ 

for(i=0; i<4; i++) 
clone=document.getElementById('names').getElementsByTagName('tr')[0].cloneNode(true) 

addRow(this) 


} 
</script> 

<table width="600" border="1" cellpadding="0" cellspacing="0" id="names"> 

<tr> 

<td>Attendee First Name:<input type="text" name="col_1_row_1" value="Enter First Name"></td> 

<td>Attendee Last Name:<input type="text" name="col_2_row_1" value="Enter Last Name"></td> 

<td>Attendee Badge Name:<input type="text" name="col_3_row_1" value="Enter Badge Name Name"></td> 

<td>Attendee Email Address:<input type="text" name="col_4_row_1" value="Enter Email"></td> 

<td><input type="button" value="ADD NEW ROW" onclick="addRow(this)"><br><br> 

<input type="button" value="REMOVE THIS ROW" onclick="removeRow(this)"></td> 

</tr> 

</table> 


</form> 

</body> 

</html> 

Répondre

0

Vous pouvez simplement utiliser une instruction "for". Par exemple (sans jeu de mots):

function addRow(seats) 
    htmlValue=document.forms[0].innerHTML; 
    for(i=seats;i<=0;i--) 
    { 
    htmlValue=htmlValue+"<input type='text' id='seat"+i"'/>"; 
    document.forms[0].innerHTML=htmlValue; 
    } 
} 

Fondamentalement, la fonction ci-dessus définit la valeur de la variable « i » à la même valeur que « sièges », crée un nouvel élément de forme avec un identifiant unique, et ajoute au contenu existant du formulaire. On soustrait de i et on répète le processus jusqu'à ce que i = 0. Il accède par défaut au premier formulaire sur la page (formulaires [0]), sélectionne le second, utilise les formulaires [1], etc.

Vous obtiendrez le nombre de lignes 'seats', chacune avec un identifiant unique, dans votre formulaire. C'est ce que vous vouliez dire, n'est-ce pas?