2016-03-31 6 views
1

Die Idee ist, wenn jedes Auswahlfeld geändert wird, wird es einen Teil des Verzeichnisses übergeben, das für die Formularaktion benötigt wird (der Wert jeder Option). dh:Kann dieses Javascript verkürzt werden? Jquery ist eine Option

<select onChange="chgFrmAtn" id="1-1"> 
<option value="">Any</option> 
<option value="exDir1Option1">option 1</option> 
<option value="exDir1Option2">option 2</option> 
</select> 

So, hier ist das Javascript, im Grunde möchte ich zwei Verzeichnisse bauen, verschiedene Optionen. Die Anzahl der Optionen ist viel länger als die Liste in diesem Beispielskript. Die Optionen können in beliebiger Reihenfolge sein. Wenn eine ausgewählt ist, wird sie nicht zum Verzeichnis hinzugefügt.

function chgFrmAtn(itemVal) 
{ 
    var directory1Part1 = ''; 
    var directory1Part2 = ''; 
    var directory1Part3 = ''; 

    var directory2Part1 = ''; 
    var directory2Part2 = ''; 

    if(itemVal == '1-1'){ 
     directory1Part1 = document.getElementById(itemVal); 
    } 
    if(itemVal == '1-2'){ 
     directory1Part2 = document.getElementById(itemVal); 
    } 
    if(itemVal == '1-3'){ 
     directory1Part3 = document.getElementById(itemVal); 
    } 
    if(itemVal == '2-1'){ 
     directory1Part1 = document.getElementById(itemVal); 
    } 
    if(itemVal == '2-2'){ 
     directory1Part2 = document.getElementById(itemVal); 
    } 
    document.advancedSearchForm.action = directory1Part1 + directory1Part2 + directory1Part3 + '/' + directory2Part1 + directory2Part2 + '/'; 
} 

Vielen Dank im Voraus.

+1

Versuchen Sie, Schleifen zu verwenden. Verwenden Sie Arrays oder Objekte anstelle mehrerer Variablen. Nein, jQuery hilft hier nicht viel. – Bergi

Antwort

2

versuchen

function chgFrmAtn(itemVal) 
{ 
     document.advancedSearchForm.action = document.getElementById(itemVal).value; 
} 

im Grunde sind Sie nur einen Wert in Ihrem directoryxParty bekommen, da itemVal gleich bleiben wird und man nur, wenn Aussage wird wahr.

Edit:

Wenn Werte anzuhängen ist aus jedem auszuwählen, und dann

var selectIds = [ "1-1", "1-2", "1-3", " 2-1 "," 2-2 "];

function chgFrmAtn() 
{ 
    var vals = selectIds.map(function(id){ 
     var obj = document.getElementById(id); 
     return obj && obj.value ? obj.value : ""; 
    }); 
    document.advancedSearchForm.action = vals[0] + vals[1] + vals[2] + '/' + vals[3] + vals[4] + '/'; 
} 
+0

Es muss die Aktion aus allen ausgewählten Feldern erstellen. Wird das funktionieren, um jeden Wert anzupassen? und entfernen, wenn eine Option wieder auf "any" geändert wird? – John

+0

@John versuchen Sie die aktualisierte Post – gurvinder372

2

Sie können zwei Arrays verwenden und den Vergleich zuordnen.

function chgFrmAtn(itemVal) { 
    var vals = ['1-1', '1-2', '1-3', '2-1', '2-2'], 
     directory = vals.map(function (a) { 
      return itemVal === a ? document.getElementById(a) : ''; 
     }); 

    document.advancedSearchForm.action = directory[0] + directory[1] + directory[2] + '/' + directory[3] + directory[4] + '/'; 
} 
+1

Schön, das ist eine viel sauberere Lösung. Ich werde es versuchen. Vielen Dank! – John

+0

Aber wenn Sie mehr Niveau als in der bereitgestellten Probe haben, wird es scheitern .. – Nico

+0

@nico, mehr Ebenen -> neues Design. –

Verwandte Themen