【问题标题】:Prevent submission of form until specified button clicked (thickbox dialog)在单击指定按钮之前阻止提交表单(厚框对话框)
【发布时间】:2013-02-05 18:57:27
【问题描述】:

我想在每个带有“确认”类的表单上使用 jQuery 和厚框制作一个模态确认窗口。

这是 HTML 标记:

<!-- The form below -->
<form id="myform" class="confirm" name="actionform" action="target.php">
<table>
  <tr>
    <td><input type="text" value="" placeholder="id" name="id" id="id"/></td>
    <td><input type="text" value="" placeholder="title" name="title" id="title"/></td>
    <td><input type="submit" value="Form elküldése"/></td>
  </tr>
</table>
</form>

<!-- The modal box and it's content below, called with tb_show() function -->
<div id="myModalConfirm" style="display:none">
    <div>
        <p>Are you sure?</p>
        <button id="yes">Yes, I'm sure</button><button id="cancel">No, cancel it</button>
    </div>
</div>

那么问题来了:

模态对话框显示并且工作正常,取消按钮工作但单击按钮#yes 不会提交表单,我认为这是因为 preventDefault() 函数。

这是 jQuery(我使用 jquery.1.8.3 库,所以请注意兼容性)

$(document).ready(function(){
    $('form.confirm').submit(function(e){
        var form = $(this);
        e.preventDefault();
        tb_show("Megerősítés","#TB_inline?height=100&amp;width=200&amp;inlineId=myModalConfirm&amp;modal=true",null);
        $('button#yes').click(function(){
            $(form).submit;


            });
        $('button#cancel').click(function(){
            tb_remove();
            return false;
            });
    })

});

=======|解决方法|================================================ =============== 这是给我的,但请在 cmets 中查看以下其他商品:)

$('form.confirm').submit(function(e, submit){
        if (!submit) e.preventDefault();
        tb_show("Megerősítés","#TB_inline?height=100&amp;width=200&amp;inlineId=myModalConfirm&amp;modal=true",null);
    })

    $('#yes').click(function(){
        $('form.confirm').trigger('submit', [true]);
    });


    $('#cancel').click(function(){
        tb_remove();
    });

【问题讨论】:

  • 你试过return true; 吗?
  • 是的,还有一堆变体的回报

标签: jquery forms submit preventdefault confirmation


【解决方案1】:

submit 是方法而不是属性,您缺少()。你可以使用trigger方法:

$(document).ready(function(){
    $('form.confirm').submit(function(e, submit){
        if (!submit) e.preventDefault();
        tb_show("Megerősítés","#TB_inline?height=100&amp;width=200&amp;inlineId=myModalConfirm&amp;modal=true",null);
    })

    $('#yes').click(function(){
        $('form.confirm').trigger('submit', [true]);
    });


    $('#cancel').click(function(){
        b_remove();
    });
});

【讨论】:

  • 感谢这篇文章,我已经解决了我的问题 :) 你能解释一下其中的逻辑吗?
【解决方案2】:

我认为最简单的方法是将用户是否点击“是”存储在一个变量中,如果他们点击了,让表单像往常一样处理。

$(document).ready(function(){
    var userClickedYes = false;

    $('form.confirm').submit(function(e){    
        if(!userClickedYes){
            e.preventDefault();
            tb_show("Megerősítés","#TB_inline?height=100&amp;width=200&amp;inlineId=myModalConfirm&amp;modal=true",null);
        }            
    });

    $('button#yes').click(function(){
        userClickedYes = true;
        $('form.confirm').submit();
    });
    $('button#cancel').click(function(){
        tb_remove();
    });

});

【讨论】:

  • 非常感谢你,但我不想在“action fn”中声明变量,因为环境是如此模块化:S 但是这个 sn-p 已经到了我的宝藏 :)
猜你喜欢
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
相关资源
最近更新 更多