jQuery submit()事件中的jQuery UI对话框(我做得对吗?)
我正在制作一个表单,在提交时检查用户名输入字段是否已填写。如果是,则会提示一个jqueryui对话框。如果按下“是”,则答案将发送给变量userOKWithIt,然后与对submit()函数的第二次调用一起使用 我这样做是因为我不希望用户能够使用Firebug控制台提交用户名为空的表单,例如(在其中写入('form).submit()) 这样做对吗?我觉得我错过了一些重要的东西。我不喜欢全局变量存储用户答案的想法。 代码如下:jQuery submit()事件中的jQuery UI对话框(我做得对吗?),jquery,jquery-ui,submit,jquery-ui-dialog,Jquery,Jquery Ui,Submit,Jquery Ui Dialog,我正在制作一个表单,在提交时检查用户名输入字段是否已填写。如果是,则会提示一个jqueryui对话框。如果按下“是”,则答案将发送给变量userOKWithIt,然后与对submit()函数的第二次调用一起使用 我这样做是因为我不希望用户能够使用Firebug控制台提交用户名为空的表单,例如(在其中写入('form).submit()) 这样做对吗?我觉得我错过了一些重要的东西。我不喜欢全局变量存储用户答案的想法。 代码如下: var $dialog = $('<div></d
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;
}
}
});
var$dialog=$(“”)
.html(“确实要继续吗?”)
.对话({
自动打开:错误,
可调整大小:false,
标题:“是否继续?”,
按钮:{
“是”:函数(){
$(此).dialog(“关闭”);
userOkWithIt=true;
$('form').submit();
},
否:函数(){
$(此).dialog(“关闭”);
}
}
});
var userOkWithIt=false;
$('form').submit(函数(){
if(!$('input[name=“user_name”]').val(){
//不提交,因为没有写入用户名
返回false;
}否则{
$dialog.dialog('open');
if(userOkWithIt){
返回true;
}
}
});
老实说,我对你的目标有点困惑;你真的需要决定你想要保护多少免受那些受过教育的js程序员的伤害,他们想要以一种你不想要的方式提交你的表单
编辑:此外,您应该查看HTML5所需的输入: 最好的办法可能是(我能想到的)在用户说“是”时解除提交事件的绑定。这样,表单将在不使用任何全局布尔值的情况下提交。它还允许您简化提交事件处理程序,要求用户确认,然后返回false 现在,如果您只想将userOkWithIt变量从全局范围中取出,您可以使用closure来实现这一点
下面是一些未经测试的示例代码。>>>>var yes函数;>>yesFunction();>函数(){>var userOkWithIt=false;>yesFunction=function(){>userOkWithIt=true;>}如果禁用JavaScript,用户可能可以提交表单。或者,他们可以解除绑定的
submit
事件的绑定。如果他们足够精明,愿意这样做,他们就可以提交表单。@AndrewWhitaker这不是“保护”的做法用JavaScript提交,我理解对了吗?你肯定可以这样做,但记住它总是可以被破坏的。确保你的服务器也进行了重要的验证。是的,谢谢你的解释。所以在jQuery中,没有人试图“保护”他们的提交(如果我们不计算PHP验证的话)?我不明白你的问题。请你再说一遍好吗?我的意思是,据我所知,使用jQuery的验证不如服务器端验证重要,对吗?正确。我不在乎你写什么;如果我想提交表单,我就去。服务器端验证是为了安全,等等。客户端验证是为了安全一个漂亮的用户界面和用户便利性。我编辑了我的答案,加入了HTML5所需输入的链接。
>>> 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;
}
}
});
>>> }(); <<<