2017-10-15 1 views
0

Die obligatorische div-ID erhält verschiedene Zahlen von Eingabefeldern, die dynamisch in diesem Feld angezeigt werden. Jedes Eingabefeld, das mit dem ersten beginnt, erhält eine ID attr1, dann attr2, .. attr [n]. Ich brauche eine Möglichkeit, dies in ein Array zu bekommen, das den Wert jedes Eingabefeldes mit keyup bekommt und in ein separates Eingabefeld mit ID-Details legt. Dieser Code funktioniert, gibt aber in einigen Fällen undefiniert zurück, wenn das hartcodierte Eingabefeld ids das generierte Eingabefeld ids überschreitet. Vielen Dank.Iteration über dynamisch generierte Eingabefeld-IDs und Verwendung von keyup zum Abrufen ihrer Werte in einem separaten Eingabefeld

<div id="attributes"> <!--Start of Div Refreshed on Ajax Page Refresh--> 
      <div id="mandatory"> 

      </div> 
    </div> 



    var total = '#attr1, #attr2'; 

    $("#attributes").on('keyup', total, function(){      
        update(); 
      }) 

      function update() { 
       $("#detail").val($('#attr1').val() + "," $('#attr2').val()); 
       } 
+0

ist Ihr Problem die fehlende Pluszeichen diese Linie? '$ (" #detail "). val ($ ('# attr1'). val() +", "$ ('# attr2'). val());' – Nick

+0

Keine snapjs. Das Pluszeichen verkettet Werte der Eingabefelder durch ein Komma getrennt und setzt sie in das Eingabefeld mit id = detail. Mein Problem ist, dass ich eine Möglichkeit brauche, um das zu erreichen, indem ich die generierten dynamischen Eingabefelder abspeichere und durchschlinge, indem ich ihre Werte schnappe und sie in id = detail setze – Maxenem

Antwort

0

Wenn ich Recht Ihre Frage verstanden denke ich, du bist für so etwas suchen:

var fields = $("#mandatory").find("input"), 
 
    ids = []; 
 

 
fields.each(function(){ 
 
\t \t $(this).on("keyup", function(){ 
 
    \t var val = ""; 
 
     ids = []; 
 
     fields.each(function(){ 
 
     val += $(this).val() + (fields.length === ($(this).index() + 1) ? "": ", ");  
 
     
 
     ids.push($(this).get(0).id); 
 
     }); 
 
     $("#detail").val(val); 
 
     console.log(ids) 
 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="attributes"> 
 
<div id="mandatory"> 
 
<input id="one" class="one" value="54"/> 
 
<input id="two" class="two" value="55"/> 
 
<input id="three" class="three" value="587"/> 
 
</div> 
 
</div> 
 
<input id="detail" type="text" />

+0

Vielen Dank. – Maxenem

0

Ich bin mir nicht sicher, ob dies ist, was Sie suchen, aber ich denke, es wird Ihnen den richtigen Weg nach unten. In diesem Beispiel wird jedes Mal, wenn ein Texteingabefeld generiert wird, ein Eingabe-Ereignishandler an ihn angehängt, der den Wert eines Haupttextbereichs ändert. Wenn das nicht genau das ist, wonach Sie suchen, lassen Sie es mich wissen und ich werde mich freuen, es auszuprobieren.

document.getElementById('adder').onclick = function() { 
 
    var dynamicTextbox = document.createElement('input'); 
 
    dynamicTextbox.setAttribute('type', 'text'); 
 
    dynamicTextbox.setAttribute('class', 'dynamicText'); 
 
    dynamicTextbox.addEventListener("input", function() { 
 
    var allTextboxes = document.getElementsByClassName('dynamicText'); 
 
    var allValues = ''; 
 
    for (var i=0; i < allTextboxes.length; i++) { 
 
     allValues += allTextboxes[i].value; 
 
    } 
 
    document.getElementById('detail').value = allValues; 
 

 
    }); 
 
    document.getElementById('textboxes').appendChild(dynamicTextbox); 
 
}
<textarea id="detail"></textarea> 
 
<input id="adder" type="button" value="Add Text Field" /> 
 
<div id="textboxes"></div>

+0

Ich schätze deine Bemühungen, mir zu helfen. Das ist ähnlich, aber in meinem Fall muss ich die IDs der generierten Eingabefelder in einem Array sammeln, da die Anzahl der erzeugten Eingabefelder sich ändert; manchmal 2 oder 13. Also brauche ich ein Array, um alle Eingabefelder leicht zu greifen und ihre Werte auf Key-up in ein anderes Feld zu greifen. – Maxenem

+0

@Maxenem Wie wäre es jetzt? Ich glaube nicht, dass Sie ihnen alle unterschiedlichen IDs geben müssen, aber wenn sie alle die gleiche Klasse haben, sollte das ausreichen. – Nick

Verwandte Themen