【问题标题】:jQuery UI dialog in jQuery submit() event (am I doing it right?)jQuery submit() 事件中的 jQuery UI 对话框(我做得对吗?)
【发布时间】:2012-07-30 00:28:41
【问题描述】:

我正在制作一个表格,该表格是否填充了USER_NAME输入字段。如果是则提示 jQuery UI 对话框。如果按下“是”,则答案将发送到变量 userOKWithIt,然后用于第二次调用 submit() 函数。

我这样做是因为我不希望用户能够使用 Firebug 控制台提交带有空 user_name 的表单(例如,将 ('form).submit() 写入它)。

这是正确的做法吗?我有一种感觉,我错过了一些重要的东西。我不喜欢存储用户答案的​​全局变量的想法。 代码如下:

var $dialog = $('<div></div>')
.html('<p>Are you sure you want to continue?</p>')
.dialog({
autoOpen: false,
resizable: false,
title: 'Continue anyway?',
buttons: {
    "Yes": function() {
        $( this ).dialog( "close" );
        userOkWithIt = true;
        $('form').submit();
    },
    No: function() {
        $( this ).dialog( "close" );
    }
}
});

var userOkWithIt = false;
$('form').submit(function(){    
if(!$('input[name="user_name"]').val()){
    //Don't submit because there is no user name written
    return false;
}else{
    $dialog.dialog('open');
    if(userOkWithIt){
        return true;
    }
}
});

【问题讨论】:

  • 如果用户禁用JavaScript,用户可能会提交表单。或者,他们可以取消绑定您已绑定的 submit 事件。如果他们足够精明,愿意去做,他们就能做到。
  • @AndrewWhitaker 用 Ja​​vaScript “保护”提交不是一种做法,我理解对吗?
  • 您绝对可以做到,但请记住,它总是可以颠覆。确保您的服务器也进行重要的验证。
  • 是的,谢谢你的解释。

标签: jquery jquery-ui submit jquery-ui-dialog


【解决方案1】:

老实说,我对你的目标有点困惑;你真的需要决定你想要保护多少受过教育的 js 程序员想要以你想要的方式提交你的表单。


编辑:另外,您应该查看 HTML5 必需输入:http://www.w3schools.com/html5/att_input_required.asp

可能最好的想法(我能想到的)是在用户说是时取消绑定您的提交事件。这样,表单将在没有任何全局布尔值的情况下提交。它还允许您简化提交事件处理程序以要求用户确认,然后返回 false。

现在,如果您只想将 userOkWithIt 变量移出全局范围,您可以使用闭包来完成。

这是一些未经测试的示例代码。 >>>

>>> var yesFunction; <<<

var $dialog = $('<div></div>')
    .html('<p>Are you sure you want to continue?</p>')
    .dialog({
        autoOpen: false,
        resizable: false,
        title: 'Continue anyway?',
        buttons: {
            "Yes": function() {
                $( this ).dialog( "close" );

                >>> yesFunction(); <<<

                $('form').submit();
            },
            No: function() {
                $( this ).dialog( "close" );
            }
        }
    });

>>> function() {                   <<<
>>> var userOkWithIt = false;      <<<

$('form').submit(function() {

    >>> yesFunction = function() { <<<
    >>>     userOkWithIt = true;   <<<
    >>> }                          <<<

    if(!$('input[name="user_name"]').val()) {
        //Don't submit because there is no user name written
        return false;
    } else {
        $dialog.dialog('open');
        if(userOkWithIt) {
            return true;
        }
    }
});

>>> }();                           <<<

希望它有所帮助。如果您需要任何澄清,请告诉我。我会尝试在接下来的几天内回来。

【讨论】:

  • 所以在 jQuery 中,没有人试图“保护”他们的提交(如果我们不计算 PHP 验证)?
  • 我不明白你的问题。能否请您重述一遍?
  • 我的意思是,据我了解,使用 jQuery 的验证不如服务器端验证重要,对吧?
  • 正确。我不在乎你写什么js;如果我想提交表格,我会去的。服务器端验证是为了安全等。客户端验证是为了漂亮的用户界面和用户方便。
  • 我编辑了我的答案以包含指向 HTML5 必需输入的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多