2012-04-03 76 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