フォームの値が最初のページ レンダリングから変更されるまで送信を許可しないスクリプトがあります。
ラジオボタンを除いて、すべてが機能します。それらをオンまたはオフにしようとしても、ボタンには影響しません。
誰が何が悪いのか分かりますか?(1つ以上のチェックボックスが最初のページレンダリングから変更されたかどうかを確認したい)
$(document).ready(function () {
var button = $('#submit-data');
$('input, select, checkbox').each(function () {
$(this).data('val', $(this).val());
});
$('input, select, checkbox').bind('keyup change blur', function () {
var changed = false;
$('input, select, checkbox').each(function () {
if ($(this).val() != $(this).data('val')) {
changed = true;
}
});
$('#submit-data').prop('disabled', !changed);
});
});
編集:
チェックボックス html:
<input checked="checked" id="contactemail" name="contactemail" type="checkbox" />
<input id="contactsms" name="contactsms" type="checkbox" />
<input checked="checked" id="contactphone" name="contactphone" type="checkbox" />
編集2:
Marikkan Chelladurai からの回答からの新しいコード。ほとんど機能していますが、チェックボックスが最初にチェックされておらず、ユーザーがチェックした場合にのみ機能します。JSFiddle へのリンク
$(document).ready(function() {
var button = $('#submit-data');
$('input, select').each(function () {
$(this).data('val', $(this).val());
});
$('input[type=radio], input[type=checkbox]').each(function (e) {
$(this).data('val', $(this).attr('checked'));
}); //For radio buttons
$('input, select').bind('keyup change blur', function (e) {
var changed = false;
if (e.target.type == "radio" || e.target.type == "checkbox" ) {
if($(this).data('val') != $(this).attr('checked')){
changed = true;
}
} else {
if ($(this).val() != $(this).data('val')) {
changed = true;
}
}
$('#submit-data').prop('disabled', !changed);
});
});