2012-04-03 44 views
4

使用confirm()方法時,如何防止通過onclick DOM事件更改表單文件輸入元素?JavaScript:如果用戶取消確認,文件輸入onclick阻止更改()

在示例中,我想讓用戶有機會通過詢問他們是否希望Ok | cancel來取消文件輸入元素的值,如果他們單擊取消,則不應顯示文件對話框窗口。

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

O.K.你幾乎在那裏,只要返回'確認'的價值,請參閱下面的答案。 – gdoron 2012-04-03 19:10:23

+0

@John如果你需要更多的答案,而不是你現在問的問題 - 「* [...]我需要執行一些其他的腳本。」 - 你應該編輯你的問題,包括這個。 – 2012-04-03 19:15:46

+0

Colin,請勿添加不必要的空格。 – John 2012-04-03 19:16:12

回答

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();非常有用,很酷。謝謝。我以前想過這個,但沒有在類似的SO問題中找到它。 – goamn 2017-02-17 04:39:10

3

爲什麼不內聯,如果你有一個文件輸入?

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

你爲什麼建議他使用內聯腳本? – gdoron 2012-04-03 19:11:25

+0

只有函數可以被調用,內聯腳本不是我可以做的,儘管謝謝你的答案。 – John 2012-04-03 19:11:48

+0

如果它只是一個文件輸入,那麼它沒有任何問題。如果他需要重新使用它,那麼我可以看到分離它的重點。 – j08691 2012-04-03 19:12:20

0

您需要返回confirm結果,並返回函數的結果:

<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

基本上和j08691一樣。 – 2012-04-03 19:11:00

+0

這看起來不錯,雖然問題是如果腳本返回true,我需要執行一些其他腳本。 – John 2012-04-03 19:12:23

相關問題