2016-04-08 11 views
5

Ho il seguente codice html. È generato dal motore Razor. Questo è dinamico. Voglio dire che il no degli elementi nel menu a tendina può variare a seconda dell'utente. Devo replicare questo menu a discesa esattamente sotto lo stesso menu a discesa con nuovo ID e nuovo nome. Ho guardato here, here, here e here. Di seguito è riportato il mio html. Ho aggiunto commenti nel codice per ulteriori chiarimenti.Come aggiornare l'id e il nome dell'elemento html all'interno dell'elemento div?

<!-- the entire section with id and name template needs to be copied --> 
 
<div id="template" name="template" class="form-group unique"> 
 
    <label class="control-label col-md-2" for="Course">Course</label> 
 
    <!-- the drop down below has id and name as Course[0].Title 
 
I need to increment index inside [] --> 
 
    <div class="col-md-10"> 
 
    <select class="form-control drop valid" id="Course[0].Title" name="Course[0].Title"> 
 
     <option value="1">Statistics</option> 
 
     <option value="2">Trigonometry</option> 
 
     <option value="3">Biology</option> 
 
     <option value="4">Neurology</option> 
 
     <option value="5">Applied</option> 
 
     <option value="6">Theoretical</option> 
 
    </select> 
 
    </div> 
 
</div>

Ora mi si avvicinò con seguente codice jQuery. Copia solo una volta e quindi smette di funzionare. Ho controllato la console e non ci sono errori. Il codice javascript con commenti per chiarimenti è il seguente.

< script src = "~/Scripts/jquery-1.10.2.min.js" > < /script> 
 
<script type="text/javascript 
 
"> 
 
    
 
    $(document).ready(function() { 
 
\t //copy the section with class name unique 
 
     var clone = $('.unique').clone(); 
 
\t //Copy again as i am modifying the id,name of div with unique class 
 
     var clone2 = $('.unique').clone(); 
 
\t //initialize the index with 1, the item with 0 index is already in webpage. 
 
     var i = 1; 
 
\t //Change name of drop down who has class drop and assign new name 
 
     $(".unique ").find(".drop ").attr(" 
 
name ", " 
 
Course[0].Title "); 
 
\t //Change id of drop down who has class drop and assign new id 
 
     $(".unique ").find(".drop ").attr(" 
 
id ", " 
 
Course[0].Title "); 
 
\t //on click of plus button, i add clone of drop down with parent div section and with new id and name 
 
     $("# 
 
plus ").click(function() { 
 
\t //Add after the element which has class unique 
 
      $('.unique').after(clone2); 
 
\t //Find name inside unique and update 
 
      $(".unique ").find(".drop ").attr(" 
 
name ", " 
 
Course[" + i + "].Title "); 
 
\t //Find id inside unique and update 
 
      $(".unique ").find(".drop ").attr(" 
 
id ", " 
 
Course[" + i + "].Title "); 
 
\t //Increment the index 
 
      i = i + 1; 
 
     }); 
 

 
    }); 
 
</script>

Cosa c'è di sbagliato nella sceneggiatura?

risposta

2

È quello che vuoi? C'era alcuni errori di battitura durante l'impostazione attr("name") e attr("id")

qui è anche il mio codice per ottenere l'inserto funziona tanto quanto si vuole:

ho clonare l'elemento in caso click() per rendere funziona.

$(document).ready(function() { 
//initialize the index with 1, the item with 0 index is already in webpage. 
    var i = 1; 
    $("#plus").on('click', function() { 
//Add after the element which has class unique 
     var clone2 = $('#template').clone(); 
     $("#template").after(clone2); 
     $(clone2).attr('id',"template"+i); 
     $(clone2).attr('name',"template"+i); 
//Find name inside unique and update 
     $(clone2).find(".drop ").attr("name", "Course[" + i + "].Title "); 
//Find id inside unique and update 
     $(clone2).find(".drop ").attr("id", "Course[" + i + "].Title "); 
//Increment the index 

     i++; 
    }); 
}); 

See this fiddle

+0

Questo funziona. Non ricevo valori nel mio controller. potrebbe esserci qualcosa in più da cercare. Sto controllando. una volta fatto, accetterò la risposta. Apprezzo gli sforzi. –

+0

Prego. Modifico anche attr' id' e 'name' della classe' .unique' che cloni nel tuo codice perché ID deve essere univoco. –

+0

Sì. Che ho notato. È perfetto. –

0

provare a utilizzare for loop signore

In primo luogo, impostare il selezionare all'interno di un div per esempio:

<div class="select-inside"> 
    <select> 
    <option value="1">Statistics</option> 
    <option value="2">Trigonometry</option> 
    <option value="3">Biology</option> 
    <option value="4">Neurology</option> 
    <option value="5">Applied</option> 
    <option value="6">Theoretical</option> 
    </select> 
</div> 

Nello script, memorizzare l'elemento di selezione a una var utilizzando selettore jQuery. Quindi, utilizzare un ciclo for per clonare l'elemento select e aggiungerlo al documento.

var select = $(".select-inside select"); 

for(var i = 0; i < numberOfYourChoice; i++) { 
    var clone = select; 
    clone.attr("id", "id[" + i + "]"); 
    clone.attr("name", "name[" + i + "]"); 
    document.append(clone); 
} 
+0

Questo è il codice generato da Razor (https://en.wikipedia.org/wiki/ASP.NET_Razor).Mi serve tutta la sezione, non solo div, che include label, un div esterno con template id e drop down interno. Devo copiare in base alla selezione dell'utente. quindi, come posso trovare "numberOfYourChoice"? –

0

< script src = "~/Scripts/jquery-1.10.2.min.js" > < /script> 
 
<script type="text/javascript 
 
"> 
 
    
 
    $(document).ready(function() { 
 
\t //copy the section with class name unique 
 
     var clone = $('.unique').clone(); 
 
\t //Copy again as i am modifying the id,name of div with unique class 
 
     var clone2 = $('.unique').clone(); 
 
\t //initialize the index with 1, the item with 0 index is already in webpage. 
 
     var i = 1; 
 
\t //Change name of drop down who has class drop and assign new name 
 
     $(".unique ").find(".drop ").attr(" 
 
name ", " 
 
Course[0].Title "); 
 
\t //Change id of drop down who has class drop and assign new id 
 
     $(".unique ").find(".drop ").attr(" 
 
id ", " 
 
Course[0].Title "); 
 
\t //on click of plus button, i add clone of drop down with parent div section and with new id and name 
 
     $("# 
 
plus ").click(function() { 
 
\t //Add after the element which has class unique 
 
      $('.unique').after(clone2); 
 
\t //Find name inside unique and update 
 
      $(".unique ").find(".drop ").attr(" 
 
name ", " 
 
Course[" + i + "].Title "); 
 
\t //Find id inside unique and update 
 
      $(".unique ").find(".drop ").attr(" 
 
id ", " 
 
Course[" + i + "].Title "); 
 
\t //Increment the index 
 
      i = i + 1; 
 
     }); 
 

 
    }); 
 
</script>

1

Si potrebbe inviare dati tramite js, ma elementi che è stato aggiunto dal js dinamicamente non sarebbe tornato in azione MVC!

+0

Grazie per la risposta. L'ho risolto però ... –

Problemi correlati