我的HTML定义如下:
忘了密码
<div id='dialog-form-lostpass' title='password recovery' class='hidden lsdialog'>
<p id='explain'>Please enter your username or email address. We will then immediately mail your
password to your registered email address</p>
<p id='progress'></p>
<form>
<fieldset>
<label for='username'>username or email</label><br />
<input type='text' name='username' id='username' class='text ui-widget-content ui-corner-all' /><br />
</fieldset>
</form>
</div>
脚本:
$(document).ready(function() {
$(":button#forgotpassword").click(function() { //* open dialog to retreive user's password
$("#dialog-form-lostpass").find("p[id=progress]").text(null); //* reset progress
$("#dialog-form-lostpass").dialog("open");
return false;
});
$("#dialog-form-lostpass").dialog({
autoOpen: false,
modal: true,
buttons: {
"mail password": function() {
$("#dialog-form-lostpass").find("p[id=progress]").html("<img src='images/wait.gif' height=10>Contacting Linkshelf Server...");
$.post(options.engine, {
command: "retreivepassword",
username: $("#dialog-form-lostpass").find("input[id=username]").val(),
}, function(data) {
if (data.success) {
$("#dialog-form-lostpass").dialog("close");
$("#loginscreen").find("p[id=progress]").text("Your password is sent to your registered email address. You should receive an email from us soon. Make sure there is no spam-filter blocking our email.").addClass("ui-state-error").removeClass("ui-state-error", 1700);
} else {
if (data.feedback == "invalid entry") {
$("dialog-form-lostpass").find("p[id=progress]").text("Invalid entry. You didn't provide us with enough information to retreive your password").addClass("ui-state-error").removeClass("ui-state-error", 1700);
} else {
$("#dialog-form-lostpass").find("p[id=progress]").text("Unknown username and/or email address. We can not retreive your password").addClass("ui-state-error").removeClass("ui-state-error", 1700);
}
}
}, "json");
}
},
});
});
现在当我点击'忘记密码'按钮时,我会看到对话框(在this fiddle上查看,布局看起来很糟糕,但你会明白这一点)。当我点击ESC时,我回到初始屏幕,当我点击“邮件密码”时没有意外发生,但是当我点击“输入”浏览器加载一个不同的位置时,就像执行表单的默认操作一样。
在小提琴中很难看到,但在我的网站中,人们被转发到./?username=,这告诉我这是初始屏幕中表单中不需要的行为。我怎样才能防止这种情况发生?
答案 0 :(得分:4)
在对话框中添加一个id:
<form id="passwordform">
<fieldset>
<label for='username'>username or email</label><br />
<input type='text' name='username' id='username' class='text ui-widget-content ui-corner-all' /><br />
</fieldset>
</form>
然后告诉jQuery阻止它提交,因为对话框会这样做:
$('#passwordform').submit( function(e) {
e.preventDefault();
});
答案 1 :(得分:3)
您的对话框正在关闭,因为当点击输入时,表单正在提交,从而重新刷新页面。要停止此操作,您可以添加类似的内容。
$('form').submit(function(e){
return false;
});
答案 2 :(得分:0)
首先,你需要在表单中有一个提交按钮,否则按Enter键不提交它(你可以放一个隐藏的提交按钮 - 也应该工作)。
然后你可以放onsubmit="jsProcessFunctionHere(); return false"
。
这样点击Enter将触发密码重置程序,而不是关闭对话框。
答案 3 :(得分:0)
我的解决方法是在主按钮之前放置一个隐藏按钮,似乎第一个按钮是默认按钮。所以添加这样的按钮;只要确保你的.hide类有display:none;
buttons: {
"Hiden": { text: "", class:"hide", click: function () {
return false;
}},
"Process": { class: "btn btn-primary", text: "OK", click: function () {
alert('process');
}
},
Cancel: { class: "btn", text: "Cancel", click: function () {
$(this).dialog("close");
}}
}