【问题标题】:JavaScript: file input onclick prevent change if user cancels confirm()JavaScript:如果用户取消确认(),文件输入 onclick 会阻止更改
【发布时间】:2012-04-03 18:56:27
【问题描述】:

使用confirm()方法时,如何防止表单文件输入元素通过onclick DOM事件发生变化?

在示例中,我想让用户有机会不丢失文件输入元素的值,方法是询问他们是否希望确定|取消,如果他们单击取消,则不应显示文件对话框窗口。

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;
}

【问题讨论】:

  • 好的。你快到了,只需返回 confirm 值,请参阅下面的答案。
  • @John 如果您需要的答案比您当前要求的更多——“[...] 我需要在此基础上执行一些其他脚本。" - 您应该编辑您的问题以包含此内容。
  • 科林,不要添加不必要的空格。

标签: javascript confirm dom-events


【解决方案1】:

如果你有一个文件输入,为什么不直接内联呢?

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

【讨论】:

  • 为什么建议他使用内联脚本?
  • 只能调用函数,内联脚本不是我能做的,不过谢谢你的回答。
  • 如果它只是一个一次性的文件输入,它没有任何问题。如果他需要重新使用它,那么我可以看到将它分开的意义。
【解决方案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();}
 }
}

【讨论】:

  • e.preventDefault();非常有用而且很酷。谢谢。我以前想要这个,但在类似的 SO 问题中没有找到它。
【解决方案3】:

需要返回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

【讨论】:

  • 与j08691基本相同。
  • 这看起来不错,但问题是如果脚本返回 true,我需要在此之上执行一些其他脚本。
猜你喜欢
  • 2012-03-27
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多