我正在尝试使用一个表单尽管用户已经进入了下拉框,当焦点关闭时它会提交:如果他们单击“清除”按钮,它将改为清除表单而不是保存值。
JQuery的:
$("#clearbtn").click(function () {
alert("clear clicked");
$(this).data("clicked", true);
});
if ($("#clearbtn").data("clicked") == true) {
this.form.submit();
}
else {
$("#MainContent_ddlCountry").blur(function () {
$("#MainContent_txtCountrySelected").val($(this).val());
this.form.submit();
});
}
查看:
<% var qryCountry = from c in dbPCCommon.Country
orderby c.CountryDescription ascending
select new { c.CountryId, c.CountryDescription };
ddlCountry.DataSource = qryCountry;
ddlCountry.DataTextField = "CountryDescription";
ddlCountry.DataValueField = "CountryId";
ddlCountry.SelectedValue = Model.CountryId.ToString();
ddlCountry.DataBind();
%>
<tr>
<td class="labels">Country:</td>
<td>
<asp:DropDownList ID="ddlCountry" runat="server" />
<%=Html.HiddenFor(a => Model.CountryId, new {@Value = ddlCountry.SelectedValue}) %>
</td>
</tr>
<asp:TextBox ID="txtCountrySelected" name = "txtCountrySelected" runat="server" />
但是,每次运行此jQuery时,它都会默认为else语句。或者,我是否完全以错误的方式解决这个问题?
编辑以澄清: 让我尝试两种情况。
场景1:用户以地址的形式填写信息,其光标焦点移动到“国家/地区”的最后一个下拉框。这里的想法是,一旦用户选中Country框(或失去焦点),它将提交表单,因此它将保存。这很好。
场景2:现在,如果用户填写信息并且他们的光标焦点移动到“国家/地区”的最后一个下拉列表,他们决定通过单击屏幕上的“清除”提交按钮来清除整个表单。我想要清除整个表单而不是提交条目。
我认为通过使用.blur,焦点在下拉框中,当用户点击按钮时它不会失去焦点,它应该清除表单,因为按钮时焦点没有移动点击。但是,我错了。
答案 0 :(得分:2)
这是一个使用短计时器延迟来解决点击事件的工作解决方案: 它可能不是理想的解决方案,但确实有效。
$("#clearbtn").click(function () {
$(this).data("clicked", true);
});
function submitForm(e) {
if ($("#clearbtn").data("clicked") !== true) {
$("#MainContent_txtCountrySelected").val($("#MainContent_ddlCountry").val());
alert("we are submitting!");
document.forms[0].submit();
}
else {
alert("we are NOT submitting!");
}
}
$("#MainContent_ddlCountry").blur(function () {
setTimeout(submitForm,100);
});