マウスオーバーでx、yおよびマウスアウトでホバー機能を使用しました。私はクリックでも同じことを試みていますが、うまくいかないようです:
$('.offer').click(function(){
$(this).find(':checkbox').attr('checked', true );
},function(){
$(this).find(':checkbox').attr('checked', false );
});
div
をクリックするとチェックボックスがオンになり、再度クリックした場合はオフになります(クリックの切り替え)。
これは、クリックするたびにチェックボックスの現在の「チェック済み」状態を切り替えることで簡単に実行できます。例:
_ $(".offer").on("click", function () {
var $checkbox = $(this).find(':checkbox');
$checkbox.attr('checked', !$checkbox.attr('checked'));
});
_
または:
_ $(".offer").on("click", function () {
var $checkbox = $(this).find(':checkbox');
$checkbox.attr('checked', !$checkbox.is(':checked'));
});
_
または、DOMの「checked」プロパティを直接操作する(つまり、attr()
をfetchクリックしたチェックボックスの現在の状態に使用しない):
_ $(".offer").on("click", function () {
var $checkbox = $(this).find(':checkbox');
$checkbox.attr('checked', !$checkbox[0].checked);
});
_
...等々。
注:jQuery 1.6以降、チェックボックスはprop
ではなくattr
を使用して設定する必要があります。
_ $(".offer").on("click", function () {
var $checkbox = $(this).find(':checkbox');
$checkbox.prop('checked', !$checkbox[0].checked);
});
_
別のアプローチは、次のようにjqueryを拡張することです。
$.fn.toggleCheckbox = function() {
this.attr('checked', !this.attr('checked'));
}
次に呼び出します:
$('.offer').find(':checkbox').toggleCheckbox();
警告:attr()またはprop()を使用してチェックボックスの状態を変更しますしないイベントを変更する =私がテストしたほとんどのブラウザで。チェック状態は変更されますが、イベントのバブリングは行われません。 checked属性を設定した後、手動で変更イベントをトリガーする必要があります。チェックボックスの状態を監視する他のイベントハンドラーがいくつかあり、ユーザーが直接クリックしても問題なく動作します。ただし、チェック状態をプログラムで設定すると、変更イベントを一貫してトリガーできません。
jQuery 1.6
$('.offer').bind('click', function(){
var $checkbox = $(this).find(':checkbox');
$checkbox[0].checked = !$checkbox[0].checked;
$checkbox.trigger('change'); //<- Works in IE6 - IE9, Chrome, Firefox
});
toggle
関数を使用できます。
$('.offer').toggle(function() {
$(this).find(':checkbox').attr('checked', true);
}, function() {
$(this).find(':checkbox').attr('checked', false);
});
なぜ1行で行かないのですか?
$('.offer').click(function(){
$(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').attr('checked'));
});
次のように、chkDueDate
という名前の単一のチェックボックスと、クリックイベントを持つHTMLオブジェクトがあります。
$('#chkDueDate').attr('checked', !$('#chkDueDate').is(':checked'));
HTMLオブジェクト(この場合は<span>
)チェックボックスのチェック済みプロパティを切り替えます。
jQuery:最良の方法、アクションをjQueryに委任します(jQuery = jQuery)。
$( "input[type='checkbox']" ).prop( "checked", function( i, val ) {
return !val;
});
<label>
<input
type="checkbox"
onclick="$('input[type=checkbox]').attr('checked', $(this).is(':checked'));"
/>
Check all
</label>
$('.offer').click(function() {
$(':checkbox', this).each(function() {
this.checked = !this.checked;
});
});
これを変更してみてください:
$(this).find(':checkbox').attr('checked', true );
これに:
$(this).find(':checkbox').attr('checked', 'checked');
それでうまくいくかどうかは100%確かではありませんが、同様の問題があったことを思い出すようです。幸運を!
最も簡単なソリューション
$('.offer').click(function(){
var cc = $(this).attr('checked') == undefined ? false : true;
$(this).find(':checkbox').attr('checked',cc);
});
$('.offer').click(function(){
if ($(this).find(':checkbox').is(':checked'))
{
$(this).find(':checkbox').attr('checked', false);
}else{
$(this).find(':checkbox').attr('checked', true);
}
});
JQueryでは、click()が切り替えのために2つの関数を受け入れるとは思いません。そのためには、toggle()関数を使用する必要があります。 http://docs.jquery.com/Events/toggle
チェックボックス値を切り替える別の代替ソリューション:
<div id="parent">
<img src="" class="avatar" />
<input type="checkbox" name="" />
</div>
$("img.avatar").click(function(){
var op = !$(this).parent().find(':checkbox').attr('checked');
$(this).parent().find(':checkbox').attr('checked', op);
});
$('controlCheckBox').click(function(){
var temp = $(this).prop('checked');
$('controlledCheckBoxes').prop('checked', temp);
});