2016-03-20 5 views
2

Ich habe mich umgesehen und ich sehe nicht, dass das vorher gefragt wird.JS: Ändern Sie den Optionswert, wenn Sie mit Prompt ausgewählt werden?

Ich habe eine Auswahlbox, etwa so:

<select onchange="change()"> 
    <option value="" selected>Option 1</option> 
    <option value="30">Option 2</option> 
    <option value="90">Option 3</option> 
</select> 

ich eine andere Option hinzufügen möchten ...

<option value="custom">Option 4</option> 

... dass, wenn gewählt (angeklickt) ein Warnfeld wird popup den Benutzer bitten, eine Zahl einzugeben (in dem Fall 30 oder 90 waren nicht praktikable Optionen, wie in den Werten der Option), um den Wert der Option zu ersetzen.

<script> 
function change() { 
    if(value == "custom") { 
    value = prompt("Please enter a new number:", "60"); 
    } 
} 
</script> 

wollte ich wissen, was der beste Weg, dies zu tun mit einfachen alten Javascript ist - werde ich jQuery verwenden, wenn ich muss.

Irgendwelche Ideen? Ein Beispiel wäre auch großartig.

Antwort

1

Schauen Sie sich diesen Code an. Ich denke, das ist das, was Sie versuchen zu tun:

HTML

<select id="optionvals" onclick="change()"> 
    <option value="" selected>Option 1</option> 
    <option value="30">Option 2</option> 
    <option value="90">Option 3</option> 
    <option value="custom">Option 4</option> 
</select> 

JS

function change() { 
    var oItem = document.getElementById('optionvals'); 
    var value = oItem.options[oItem.selectedIndex].value; 
    if(value == "custom") { 
    alert("you've clicked b"); 
    value = prompt("Please enter a new number:", "60"); 
    oItem.options[oItem.selectedIndex].value = value; 
    console.log(oItem.options[oItem.selectedIndex].value) 
    } 
} 

Was das bedeutet ist prompt Sie auf die Änderung nur dann, wenn der ausgewählte Wert in den Optionen ist custom. Nachdem Sie einen benutzerdefinierten Wert ausgewählt haben, überschreibt er den Wert des Optionselementes custom auf den Wert, den Sie in der Eingabeaufforderung eingegeben haben. Ich habe den neuen Wert protokolliert, nachdem er zugewiesen wurde, um Ihnen zu zeigen, dass er funktioniert.

Hier eine Geige ist: https://jsfiddle.net/ng7xvy05/

+0

Das ist perfekt! Vielen Dank! Ich kann JS nicht für das Leben von mir herausfinden, ich genieße es, PHP sehr viel mehr als das Format von JS zu schreiben lol – Matthew

+0

Könnte das Skript die Option basierend auf ID anstelle des Wertes finden, so dass es möglicherweise sein könnte bei Bedarf mehr als einmal geändert? – Matthew

+1

Ja. Ändern Sie in oItem.options [oItem.selectedIndex] .value "value" in "id". –

1

Ihr onchange Ereignis ist der geeignete Weg, damit umzugehen. Dies ist jedoch hauptsächlich eine Frage des User Interface (UX) -Designs. Um dies zu tun in der Eingabeaufforderung Art und Weise, Sie sollten parseFloat verwenden:

change() { 
    var value = prompt('You\'ve chosen Other. Please enter a value', '60'); 
    if(value) { 
    value = parseFloat(value); 
    // apply it to your model 
    } else { 
    // apply NULL to your model 
    } 
} 

Aus UXD Sicht würde ich eine typeahead Eingabe verwenden. Es würde bekannte Antworten automatisch durchsuchen, aber auch dem Benutzer erlauben, eigene Antworten einzugeben. Dies ist kein Standard-HTML, also müssten Sie dies selbst schreiben oder jquery verwenden. Aber vom Standpunkt der Benutzerschnittstelle aus gesehen, sind Ansagen saugend.

+0

Vielen Dank für Ihre Antwort, ich bin kein Fan von mir fordert ... und ich würde man nie von einer Website auf dem Frontend nutzen. Dies ist nur ein kleines Tool, mit dem ich Berechnungen durchführe, die viel Zeit sparen - für einige wenige Mitarbeiter gedacht, die Eingabe ist die einfachste Sache, die ich mir vorstellen kann. Wenn ich verrückt werden wollte, könnte ich das Popup-Modell erstellen und eigene Eingaben machen. Ich bezweifle auch, dass diese Option sehr oft verwendet wird ... entweder +1 für den Vorschlag und das Nachdenken über UI/UX. – Matthew

Verwandte Themen