ユーザーがルートによって呼び出された請求書をプレビューしたいときに、関数でフォームの検証を行っています。
routes: {
"new" : "newInvoice",
"new/:assignmentid" : "newInvoiceAssignment",
"edit/:invoiceid" : "editInvoice",
"preview/:invoiceid" : "previewInvoice",
"preview" : "preview",
"delete/:invoiceid" : "deleteInvoiceModal",
"whyCant" : "whyCant",
"whatsThis" : "whatsThis"
},
そして、これがフォーム上の私の2つのボタン(実際には、ボタンと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)関数が実行され、欠落している1つのフォームフィールドが適切にキャッチされ、エラーメッセージが表示されます。その時点で、フォームフィールドに入力しても、そのボタンは無効になり、応答しなくなります。ただし、[ドラフトの保存]ボタンは完全に機能し、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を追加しました。これはコンソールに初めて表示されますが、データを変更してもう一度ボタンをクリックすると、そのログは更新されません。それがただ発砲していないというもう一つの手がかりです。