我有一个像那样检查的控制器
if (form["submit"].ToString() == "Continue")
{
}
我有按钮正在提交
<button name="submit" value="Continue">Continue</button>
在我决定在提交时禁用“继续”按钮以防止使用此功能双击时,一切正常:
$('form').submit(function () {
if ($(this).valid()) {
$(':submit', this).attr('disabled', 'disabled');
}
});
所以现在我没有在控制器上发布值form["submit"]
。
我有什么想法可以解决这个问题吗?
我仍希望阻止第二次点击,但能够在控制器上发布form["submit"]
值。
答案 0 :(得分:1)
您可以控制表单中隐藏字段中的submit
值吗?我无法分辨您可能需要的其他逻辑,但是当表单呈现时,您可以将隐藏字段的值设置为提交按钮的值,并在必要时使用下面的第一个脚本进行更改。只要它具有name
属性并且已启用(您很少禁用隐藏字段),它就会在提交表单时发布。
$(function() {
// this assumes your button has id="myButton" attribute
$(':hidden[name="submit"]').val($('#myButton').val());
});
当然,在您的表单中,您需要一个名为=“submit”的隐藏字段
<input type="hidden" name="submit" value="Continue" />
然后,每当表单状态发生变化时,修改按钮的禁用状态和隐藏字段的值以反映该值(如果它发生了更改)。
您可能会发现对此类UI功能有用的框架。我想起了KnockoutJS。它可以用来“赋值”绑定输入元素。对于这个小例子来说,这可能有点过头了,但如果您的UI扩展可能会有用。如果您有兴趣,我在下面添加了标记,脚本和评论。
$(function () {
var viewModel = {
submitValue: ko.observable("Continue")
};
ko.applyBindings(viewModel);
$('form').submit(function() {
if($(this).valid()) {
// the following line will change the both the hidden field's value
// as well as the button's value attribute
viewModel.submitValue("some other value");
// I couldn't follow your selector here, but please note I changed
// the name of the submit button in the markup below.
$(':submit, this).attr('disabled', 'disabled');
}
});
});
KnockoutJS要求您使用data-bind
属性来设置元素。在您的情况下,您将一个属性绑定到多个元素,如下所示:
<button name="submitButton" data-bind="value: submitValue"/>Continue</button>
<!-- and bind the same value similarly in the hidden field-->
<input type="hidden" name="submit" data-bind="value: submitValue"/>