表单重置按钮与jquery重置冲突

时间:2013-04-24 19:24:22

标签: javascript jquery html knockout.js form-submit

我遇到了一些奇怪的事情。我有以下表格:

<form id="addExpenseForm" name="addExpenseForm" data-bind="submit: addExpense">
    <input type="submit" value="Add" class="save" id="submit" name="submit" />
    <input type="reset" value="Reset" class="reset" id="reset" name="reset" />
</form>

如您所见,内部有一个reset按钮可清除所有form


我正在使用Knockout.js以这种方式绑定submit的{​​{1}}和form ...

reset

一切似乎都很好,但我收到了这个错误:

self.addExpense = function (formElement) {
  $('#addExpenseForm')[0].reset();
};

我无法弄清楚为什么我得到这个,因为我的代码是正确的,而奇怪的是,删除Uncaught TypeError: Property 'reset' of object #<HTMLFormElement> is not a function 按钮时代码工作正常。

我该如何解决这个问题?在同时使用reset方法和reset()按钮时是否存在某种冲突?

要知道,我做了reset来测试删除jsfiddle按钮并验证我在这里要求的内容。

http://jsfiddle.net/oscarj24/vWNf7/

3 个答案:

答案 0 :(得分:5)

是的,这里有很大的不同。使用jQuery时,通过jQuery样式调用的DOM元素(exp。$(“addExpenseForm”))被赋予“属性”。如何编写和添加这些属性取决于元素及其使用(以及其他内容,但这是另一个教训)。

我只想说,当你创建一个没有重置按钮时,那么“属性”重置确实是功能!查询时,它将返回以下值:function reset() { [native code] }

但是,当你手动添加按钮时(也就是你把它放在HTML中),然后重置变为那个按钮而不是一个功能。换句话说,它将返回类似<input type="reset" value="Reset" class="reset" id="reset" name="reset" />的内容。

这是你的问题...

如果通过HTML添加BUTTON然后使用:

$('#addExpenseForm')[0].reset.click();

否则,按钮不是type="reset",而只是一个按钮,表示“重置”或根本没有按钮!使用:

$('#addExpenseForm')[0].reset();

将它全部包装在一个大的if语句中!

if (typeof $('#addExpenseForm')[0].reset == "function") {
    $('#addExpenseForm')[0].reset();
}
else {
    $('#addExpenseForm')[0].reset.click();
}

对于Grins和咯咯笑,这里的IF语句是一行:

typeof $("#addExpenseForm")[0].reset == "function" ? $("#addExpenseForm")[0].reset() : $("#addExpenseForm")[0].reset.click();

答案 1 :(得分:0)

将重置按钮id属性从“重置”更改为其他任何内容。

请参阅此处,了解您收到错误的原因:https://stackoverflow.com/a/12541054/492325

答案 2 :(得分:0)

试试这个

$('#resetBtn').on('click', function(e){
    e.preventDefault();
    $("#myform")[0].reset.click();
}