2016-03-31 6 views
1

Gibt es eine Möglichkeit, jQuery zu verwenden, um die Attribute von HTML-Elementen dynamisch zu setzen, die in Variablen gespeichert sind?Attribute von in Variablen gespeicherten Elementen setzen

Zum Beispiel, an einer Stelle in meiner Anwendung, erstellt ein Benutzer eine variierende Anzahl von Auswahl Eingabefelder. Für die spätere Verarbeitung durch PHP müssen die Elemente im Format name='input'+siteNumber+'['+x+']' benannt werden, wobei x die Anzahl der in einer for-Schleife erstellten Elemente ist.

Hier ist eine grobe Skizze von dem, was ich denke, getan werden muss - das ist nicht Functional Code, es ist nur eine Illustration.

$(".number_select").change(function(){ 
    numberFound = $(this).val(); 
    siteNumber = $(this).parent().attr('data-site_number'); 
    //HERE'S THE INPUT TO BE NAMED 
    selectInput = "<select></select>"; 

    this['inputArray' + siteNumber] = []; 

    for(x = 1; x <= numberFound; x++){ 
     //THIS IS WHAT I'D LIKE TO ACCOMPLISH - SETTING THE ATTRIBUTE - THOUGH THIS UNDERSTANDABLY DOES NOT WORK IN THIS PARTICULAR FORMAT   
     this['inputArray' + siteNumber].push(selectInput.attr("name", "species"+siteNumber+"["+x+"]")); 
    }; 

    $(this).parent().append(this['inputArray' + siteNumber]); 
}; 

Vielen Dank.

+1

Ich denke, wenn Sie nicht funktionalen Code schreiben, sollten Sie stattdessen einen Schritt für Schritt oder Pseudocode schreiben. – ggderas

+1

Wenn Sie ein aktuelles dom-Element des jquery-Objekts erstellen, können Sie die Attribute manipulieren – scrappedcola

Antwort

1

Danke an alle - ich endete eigentlich anders diese ein wenig zu behandeln entscheiden, aber es funktioniert perfekt - anstatt die Elemente in Variablen speichern, ich stattdessen eine Funktion ...

function inputs(siteNumber, x){ 
    return ("<select name='selectInput"+siteNumber+"["+x+"]'>"+list+"</select>"); 
}; 

$(".number_select").change(function(){ 
    numberFound = $(this).val(); 
    siteNumber = $(this).parent().attr('data-site_number'); 

    this['inputArray' + siteNumber] = []; 

    for(x = 1; x <= numberFound; x++){ 
     this['inputArray' + siteNumber].push(inputs(siteNumber, x)); 
    }; 

    $(this).parent().append(this['inputArray' + siteNumber]); 
}; 

Do not Ich weiß, warum ich überhaupt nicht daran gedacht habe, es scheint mir jetzt offensichtlich. Naja, lebe und lerne.

0

Um Ihre Frage vage zu beantworten, können Sie dynamisch ein Element generieren und jQuerys attr verwenden, um das Namensattribut ziemlich einfach anzupassen.

var select = $('<select>').attr('name', 'add-name-here'); 
 

 
$('<option>').attr('value', 'some-value').text('Option').appendTo(select); 
 

 
$('#wrapper').html(select);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
    
 
<div id="wrapper"></div>

Welche

<select name="add-name-here"> 
    <option value="some-value">Option</option> 
</select> 

In Ihrem Fall gibt, anstatt sie zu #wrapper Hinzufügen würden Sie das Auswahlfeld aufbauen, wie Sie benötigen und hängen Sie ihn an je nachdem, was Auswahlbox hat der Wechsel? Ich bin mir nicht sicher, ob Sie einen bestimmten Anwendungsfall haben. Ich hoffe es hilft.

Verwandte Themen