我有一个登录表格如下。
<li class="loginlink">
<a id="showlogin" href="#">
<span style="color: #666666">Login</span>
</a>
<div class="loginbox" style="display: block;">
<fieldset>
<label>User Name : </label>
<input id="input" type="text" value="" name="input">
</fieldset>
<label>
<span style="display: inline-block; ...;"> Password :</span>
</label>
<input id="password_txt" type="password" style="padding:5px;..;"
value="" name="password_txt">
<p>
<a class="loginlink" onclick="mojarra.jsfcljs(document.getElementById('headerForm'),
{'j_idt60':'j_idt60'},'');return false" style="color: #666666;.."
href="#">Forgot Password?
</a>
<a class="loginlink" onclick="mojarra.jsfcljs(document.getElementById('headerForm'),
{'j_idt63':'j_idt63'},'');return false" style="..."
href="#">Register
</a>
</p>
<div class="loginbuttons">
<input id="loginBtn" type="submit" value="Login" name="loginBtn">
<input id="cancellogin" type="button" value="Cancel">
</div>
</div>
</li>
点击 showlogin 时。我用jQuery来显示它。像
$('#showlogin').click(function(){
var loginBox = $('.loginbox');
loginBox.show();
$('.loginbox fieldset input').focus();
if (!loginBox.is(':hidden')) {
validateUser();
}
});
$('#cancellogin').click(function(){
$('.loginbox').hide();
});
function validateUser() {
$("#loginBtn").click(function(event){
var userName = $("#input").val();
var password = $("#password_txt").val();
if (userName == "") {
$.dialog({
message: "UserName must be entered",
imageIcon: false,
type: "error",
okButtonID: "ok",
okButtonValue: "OK"
});
return false;
}
return true;
}); //end of click
} //end of validateUser()
现在发生了什么,假设我单击按钮,该框显示为
现在,如果我点击登录按钮,则会显示消息
现在,如果我点击确定按钮。盒子消失了。
直到这里的事情还可以。现在假设我点击取消按钮关闭登录表单。再次打开表单
现在再次点击登录按钮。将显示该消息
但是现在这次如果我点击确定按钮,那么叠加层就会消失,但消息却没有。为什么?我得到这样的东西
为什么这次不会消失?我做错了什么?请帮帮忙?
由于
答案 0 :(得分:2)
我认为问题与您的validateUser()
功能有关。您会在每次显示登录框时看到绑定一个新的单击处理程序,该处理程序包含显示登录按钮对话框的代码。
function validateUser() {
$("#loginBtn").click(function(event){
...
});
}
这意味着第二次显示登录框时,对话框实际显示两次。对话框第3次显示3次。你可能看不到这个,因为你的中心。如果您在行alert()
之后删除Javascript $.dialog.createUI = function (config) {
功能,您将看到第二次显示登录信息时,您会收到2个提醒!有关此问题的示例,请参阅fiddle。
除非您的代码在验证用户函数中执行其他操作,否则我建议您删除此函数,然后在文档准备好时绑定单击处理程序。所以你最终得到这样的东西:
$(document).ready(function () {
$("#loginBtn").click(function (event) {
var userName = $("#input").val();
var password = $("#password_txt").val();
if (userName == "") {
$.dialog({
message: "UserName must be entered",
imageIcon: false,
type: "error",
okButtonID: "ok",
okButtonValue: "OK"
});
return false;
}
return true;
});
$('#showlogin').click(function () {
var loginBox = $('.loginbox');
loginBox.show();
$('.loginbox fieldset input').focus();
// code to call validate user removed from here!
});
$('#cancellogin').click(function () {
$('.loginbox').hide();
});
});