【问题标题】:Jquery displaying confirmation dialog on form submitJquery在表单提交时显示确认对话框
【发布时间】:2009-09-12 04:44:08
【问题描述】:

我需要在图像点击时显示确认对话框。仅当 jquery 确认对话框返回 true 时,才应执行图像“onclick”部分中的代码。

此时,当用户点击 $(".submit_image") - 显示对话框,但仍提交表单。

jquery.alerts 插件或常规 javascript 确认对话框的逻辑应该相同。

<form name="myform">
<img class="submit_image" onclick="myform.field1.value='1';myform.field1.value='2'; myform.submit();">
</form>


$(document).ready(function(){
   // catch submit 
   $(".submit_image").click(function(e){
       jConfirm('Can you confirm this?', 'Confirmation Dialog', function(r) {
      return r;
       });
   });
});

【问题讨论】:

  • 您在这里使用的jConfirm 是什么?

标签: jquery dialog form-submit


【解决方案1】:
return jConfirm('Can you confirm this?', 'Confirmation Dialog', function(r) {
  return r;
});

也许? jQuery 需要您从 .click 函数返回“false”以停止默认操作,而现在您不会从该函数返回任何内容。

* 编辑 *

我刚刚查看了 jConfirm,由于它是如何工作的(特别是因为它不返回任何内容;它只能通过其回调返回值),所以不可能以您想要的方式使用它。您需要做的只是始终从您的 onclick 处理程序返回 false,然后在您的 jConfirm 回调中手动调用表单提交。

例子:

$(document).ready(function(){
  // catch submit 
  $(".submit_image").click(function(e){
    jConfirm('Can you confirm this?', 'Confirmation Dialog', function(r) {
      // If they confirmed, manually trigger a form submission
      if (r) $(".submit_image").parents("FORM").submit();
    });
    // Always return false here since we don't know what jConfirm is going to do
    return false;
  });
});

【讨论】:

  • 好吧,我的解释仍然正确,我只是不知道这个疯狂的 jConfirm 是如何工作的。 function(r) 返回什么?你需要弄清楚这一点。或者,您可以只使用普通的 window.confirm 对话框(根据用户选择的内容返回 true/false),但如果您不想这样做,则需要阅读 jConfirm 函数的文档以弄清楚如何从中获取真/假(然后返回该真/假)。
  • Kelvin,请看我上面修改后的答案,如果它对你有用,请告诉我。
  • 感谢机器鬼的回复。我尝试了这个想法,但仍然没有成功。我认为“return false”不会阻止提交表单,因为它是在点击事件中执行的。
  • 这不是问题。如果您不相信我,请尝试以下操作;正如您将看到图像的 onClick 返回的“false”阻止表单的 onSubmit 发生:
    sstatic.net/so/img/logo.png" onclick="return false"/>
  • 如果您将代码缩减为以下内容,表单是否仍会提交?此外,您是否有任何其他事件处理程序连接到相同的元素? $(document).ready(function(){ // 捕获提交 $(".submit_image").click(function(e){ return false }); });
【解决方案2】:

你需要分解你的事件。一个是图片的onclick调用form的onsubmit,然后是form的onsubmit,这里是'false'返回停止表单提交的合适位置。

【讨论】:

  • 杰夫,不应该阻止图像的 onClick 阻止表单的 onsubmit 发生(通过如果您返回 false jQuery 将进行的 stopPropagation 调用)?
【解决方案3】:

我找到了问题的解决方案,但仍需要对现有代码进行一些更改。

在 html 中,我将图像放置在锚标记内,href = 与图像 onclick 事件中的内容相同。

<form name="myform">
<a href="javascript: myform.field1.value='1';myform.field2.value='2'; myform.submit();" class="submit_image_link"><img src="..."></a>
</form>

添加了 e.preventDefault() 方法以防止锚点的默认事件,即在 href 部分中跟随链接或 javascript。据我了解,“return=false”或 preventDefault() 在我的原始代码中对我不起作用,因为“img”标签没有任何默认操作。

$(document).ready(function(){
   // catch submit 
   $(".submit_image_link").click(function(e){
    e.preventDefault();
    jConfirm('Can you confirm this?', 'Confirmation Dialog', function(r) {
        if (r) location.href = $(".submit_image_link").attr('href');
    });
   });
});

【讨论】:

  • 好的,三个问题.... 1) 与其使用包裹在 IMG 周围的 a 并使用 JS 进行提交,还有一种更简单的方法:只需使用 ;它甚至在...中内置了提交逻辑 2) 从 jQuery 连接的事件处理程序返回 false 与调用 e.preventDefault(); e.stopPropagation();来自那个处理程序...请参阅docs.jquery.com/Events/bind ... 3) 如果有人浪费时间帮助回答您的问题,那么创建您自己的答案并否认他们花费的所有时间都是不礼貌的。
  • 4) 如果您要使用 A/IMG(而不是 INPUT[type='image']),则不需要在 A 的 href 中使用 myform.submit,也不需要e.preventDefault;这就是导致所有问题的原因。您所需要的只是在您的 JConfirm 回调中提交调用。说“每次点击时提交;等等,你点击了?不提交;你确认了?现在提交”和说“你确认了?提交”之间的区别。使用您的 e.preventDefault,您始终可以防止 A 上的默认操作发生;如果你打算这样做,你最好不要把它放在首位。
  • 你好 machineghost,对不起,如果我以任何方式冒犯了你,我绝对不是故意的。我将再重复一次,感谢您的帮助。我还不能为你的帖子投票,因为我的个人资料声誉不够高。现在,关于您的其他更正:1)我没有使用 因为我不想修改现有代码很多(此外,此按钮位于表单之外)。 2)是的,这是正确的,我同意你的看法。 4)我保留了原始代码,所以旧应用程序的其他部分不会受到影响。但我同意你的看法,这将是更好的方法。再次感谢您的帮助。
  • “我还不能为你的帖子投票”我很抱歉,我忘记了有些人不能批准答案(我已经让人们做了“接受我的答案,然后批准他们自己的答案”之前的事情,所以我跳了枪)。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2011-01-18
  • 2011-02-07
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多