当用户想要预览由路由调用的发票时,我正在函数中进行表单验证:
routes: {
"new" : "newInvoice",
"new/:assignmentid" : "newInvoiceAssignment",
"edit/:invoiceid" : "editInvoice",
"preview/:invoiceid" : "previewInvoice",
"preview" : "preview",
"delete/:invoiceid" : "deleteInvoiceModal",
"whyCant" : "whyCant",
"whatsThis" : "whatsThis"
},
这是我在表单上的两个按钮(实际上是一个按钮和一个 href):
<div class="span8 alignRight">
<button id="saveInvoiceDraft" type="submit" class="btn btn-warning">Save Draft</button>
<a id="previewInvoice" class="btn btn-primary">Preview & Send</a>
</div>
创建此发票时,标签的 URL 设置为:
var url = '#preview';
$('#previewInvoice').attr('href',url);
最后,当我单击“预览和发送”按钮时,下面的 previewInvoice(invoiceid) 函数运行,正确捕获缺少的一个表单字段并显示错误消息。那时,即使我填充了表单字段,该按钮也已失效并且不再响应。但是,“保存草稿”按钮可以完美运行,并且与 previewInvoice() 函数中的代码相同。
我知道可能有更好的方法来做到这一点,但我遵循的是在我继承的应用程序的另一部分中完成的方式。实际上,当我键入此内容时,我想知道,因为 sendDraft() 函数有效,它是一个按钮,而 previewInvoice() 函数无效,它是一个 href 的事实可能与它有关。
function previewInvoice(invoiceid) {
var invoice = new Invoice({"invoiceid": invoiceid});
invoice.set({"invoiceid": invoiceid,"invoicestatus": "draft"});
formGetter(invoice);
validateInvoiceForm(invoice);
if (window.errors.length == 0) {
//business logic here
if (window.panel == undefined) {
// business logic here
}
else {
//save business logic here
}
}
else {
showInvoiceErrors();
}
}
任何想法为什么按钮不再响应?我在控制台中没有看到任何错误。我在函数内添加了一个 consol.log 来显示不同表单元素的值,它第一次显示在控制台中,但是如果我更改数据并再次单击按钮,该日志不会更新,这对我来说是另一个线索,它只是没有开火。