2012-04-03 9 views
4

Wie verhindere ich, dass sich ein Formulardateieingabeelement über das onclick-DOM-Ereignis ändert, wenn ich die confirm() -Methode verwende?JavaScript: Dateieingabe onclick verhindert Änderung, wenn Benutzer bricht confirm()

Im Beispiel möchte ich einem Benutzer die Möglichkeit geben, den Wert eines Dateieingabeelements nicht zu verlieren, indem er sie fragt, ob er Ok | abbrechen möchte. Wenn er auf Abbrechen klickt, sollte das Dateidialogfenster nicht angezeigt werden.

XHTML

<input name="post_file" onclick="images_change();" type="file" value="" /> 

JavaScript

function images_change() 
{ 
var answer = confirm('Okay or cancel, if you cancel no dialog window will be displayed.'); 

if (answer) 
{ 
    answer = true; 
    //previous item previews deleted here in a while loop. 
} 
else {answer = false;} 

return answer; 
} 
+0

ö.K. Sie sind fast da, geben Sie einfach den 'confirm'-Wert zurück, siehe unten. – gdoron

+0

@John Wenn du mehr von deinen Antworten benötigst als das, was du gerade fragst - "* [...] muss ich noch etwas anderes Scripting ausführen. *" - solltest du deine Frage editieren, um diese zu integrieren . –

+0

Colin, fügen Sie keine unnötigen Leerzeichen hinzu. – John

Antwort

2
document.getElementById('post_file').addEventListener('click',function(e) {images_click(e);},false); 

function images_click(e) 
{ 
    var answer = confirm('Ok or cancel?'); 

    if (answer) 
    { 
    //shows file selection dialog window. 
    } 
    else {e.preventDefault();} 
} 
} 
+1

e.preventDefault(); ist soooo nützlich und cool. Vielen Dank. Ich wollte das vorher, habe es aber nicht in ähnlichen SO-Fragen gefunden. – goamn

3

Warum nicht einfach inline, wenn Sie die eine Datei-Eingabe haben?

HTML:

<input name="post_file" onclick="return check()" type="file" value="" />​ 

JavaScript:

function check() { 
    return confirm('Okay or cancel, if you cancel no dialog window will be displayed.'); 
}​ 

jsFiddle example.

+0

Warum empfehlen Sie ihm, Inline-Skripte zu verwenden? – gdoron

+0

Nur die Funktion kann aufgerufen werden, Inline-Scripting kann ich nicht machen, aber danke für die Antwort. – John

+0

Wenn es nur eine einzige Dateieingabe ist, ist nichts falsch daran. Wenn er es wiederverwenden muss, dann kann ich den Punkt sehen, der es trennt. – j08691

0

Sie müssen das confirm Ergebnis zurückzukehren, und senden Sie das Funktionsergebnis:

<input name="post_file" onclick=" return images_change();" type="file" value="" />​ 

function images_change() { 
    return confirm('Okay or cancel, if you cancel no dialog window will be displayed.'); 
} 

LIVE DEMO

+0

Grundsätzlich das gleiche wie j08691. –

+0

Das sieht gut aus, obwohl das Problem ist, wenn das Skript true zurückgibt, muss ich noch einige andere Skripte ausführen. – John

Verwandte Themen