0

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

我这样做是因为我不希望用户能够使用 Firebug 控制台提交带有空用户名的表单(例如在其中写入('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;
    }
}
});
4

1 回答 1

0

老实说,我对您的目标有些困惑;你真的需要决定你想要保护多少受过教育的 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;
        }
    }
});

>>> }();                           <<<

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

于 2012-07-28T00:52:43.973 回答