私はすべての未チェックのチェックボックスを削除し、隠しフィールドと値を "いいえ"に置き換えるスクリプトを自分のHTMLフォームに追加しようとしています。チェックボックスがチェックされている場合、「はい」の値が表示されます。私のフォームスクリプトは2回目の投稿でのみ機能するのはなぜですか
私が前に提案し見てきたように私はそれをホストするサイトは、同じ名前を持つ2つのフォームフィールドを許可していないので、私は、フォームにこの隠しフィールドを追加することはできません、ご注意:いくつかのためにPost the checkboxes that are unchecked
を理由は、スクリプトは、ページを読み込んで、すべてのチェックボックスをオフにしてフォームを送信してからフォームを再送信するときにのみ機能します。私がページをリロードすると、私は同じことをやり直さなければならない。これは私が何を参照しているかを示しています:
私は最初のフォーム提出の後にイベントリスナーを追加していますか?ここで
は、サンプルコードとフィドルである:ここではhttps://jsfiddle.net/gvd1jr0o/6/
は私のスクリプトです:
$("#foo").submit(
function() {
var formEl = $(this);//get the reference of the form
debugger;
// Add an event listener on #foo submit action...
// For each unchecked checkbox on the form...
formEl.find("input:checkbox:not(:checked)").each(
// Create a hidden field with the same name as the checkbox and a value of 0
// You could just as easily use "off", "false", or whatever you want to get
// when the checkbox is empty.
function(index) {
var input = $("<input>");
input.attr('type', 'hidden');
input.attr('name', $(this).attr("name")); // Same name as the checkbox
input.attr('value', "no"); // or 'off', 'false', 'no', whatever
// append it to the form the checkbox is in just as it's being submitted
formEl.append(input); //$("#foo") is referring to the form
} // end function inside each()
); // end each() argument list
return true; // Don't abort the form submit
} // end function inside submit()
);
あなたのフィドルが最初にクリックするとフォームを送信しています。何か不足していますか? –
フォームは送信されますが、最初のフォーム送信ではチェックされていないチェックボックスの値は「いいえ」にする必要があります。それはしていない。それをどのようにフィドルで表示するかは分かりませんでした。だから、私はちょうどスクリプトを使ってシンプルなフォームを表示するためにフィドルを使用しました – cgrouge
私はまだネットワークタブに掲示された値 "いいえ"を参照してください..しかし、唯一の違いは内部の機能が提出の2回目に実行されます.. –