私はかなり奇妙な行動に出くわしました。2つのページがあり(ページAとページBと呼びます)、両方のページに次のJavaScriptコードが含まれています。
<script type="text/javascript">
$(document).ready(function(){
$('a > img.id-provider, #signup-button').click(function(e){
if (!$('#chk-agree').attr('checked')) {
alert('Please accept our terms and conditions before continuing');
}
else {
alert('ok');
}
e.preventDefault();
});
});
</script>
このページはここで表示できます:http://jsfiddle.net/SrRAS/
Bページでは、動作は期待どおりです。つまり、サインアップボタンがクリックされる前にチェックボックスがチェックされていない場合、警告が発行されます。
ただし、Aページでは、チェックボックスを手動でクリックしてチェックした場合でも、警告が常に表示されます。
何が起こっているのかを理解しようとしたときのFFコンソール出力(両方のページ)は次のとおりです。
>>> $('#chk-agree').attr('checked')
undefined
>>> $('input#chk-agree').attr('checked')
undefined
最終的に、ページAで、チェックされた属性をプログラムで設定することにしました(通常のユーザーのように手動でクリックするのではなく)。
>>> $("input#chk-agree").click()
jQuery(input#chk-agree, input#chk-agree)
>>> $("input#chk-agree").attr('checked')
"checked"
次に、 Aページのサインアップボタンをクリックすると、期待どおりに機能しました(「ok」メッセージが表示されました)。ただし、 Aページのチェックボックスを手動でオフにした場合でも、「ok」メッセージが表示され続けました。したがって、何らかの理由で、ページAで、チェックボックスを手動でクリックしても、「チェック済み」属性は切り替えられないようです。
2つの質問があります:
- チェックボックス'checked'属性を切り替えずにチェックボックスを手動でチェックするのはなぜですか
- あるページでコードが期待どおりに機能し、別のページでは機能しない原因は何ですか?
[[編集]]
I have also tried the following check instead of the one shown in my snippet above:
if (!$(this).is(':checked')/*!$('#chk-agree').attr('checked')*/) {
...
}else {
...
}
さて、少なくとも動作は両方のページで一貫しており、チェックボックスを手動でクリックしたときにどのページ(AまたはB)も認識していないようです-一体何が起こっているのでしょうか?!
[[編集2]]
動作していないページのマークアップはここにあります:http://jsfiddle.net/SrRAS/
このページで機能しない原因を突き止めることに非常に興味があります。