1

我需要在图像点击时显示确认对话框。仅当 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;
       });
   });
});
4

3 回答 3

3
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;
  });
});
于 2009-09-11T16:18:43.383 回答
1

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

于 2009-09-11T16:30:51.883 回答
0

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

在 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');
    });
   });
});
于 2009-09-11T20:44:08.097 回答