我可以禁用复选框但仍触发其事件吗?

3
使用onclick="$( '#co1' ).attr( 'checked', true );"修改问题后,与disabled="disabled"属性一起使用效果很好。但是,$aBoxes.change(function(){似乎无法与onclick="$( '#co1' ).attr( 'checked', true );"一起使用。
原始问题是:“有人告诉我,“元素被禁用时,事件也被禁用。” 我想禁用一个复选框,但通过单击链接触发事件。 我有这个jquery:”
var $aBoxes = $('#co1,#co2,#co3');
$aBoxes.change(function(){
  // check if all are checked based on if the number of checkboxes total
  // is equal to the number of checkboxes checked
  if ($aBoxes.length == $aBoxes.filter(':checked').length){
      $('#a1').hide();
      $('#a2').show();
  }else{
    $('#a1').show();
    $('#a2').hide();
  }
});


<div id="a1">
a1 div
</div>

<div id="a2" style="display:none;">
a2 div
</div>

<div class="content">
<ul>
<li>
<input disabled="disabled" id="co1" name="co1" type="checkbox" <?php if($mychecklist->co1==1) echo 'checked' ?>/>
<a href="http://bbc.co.uk" target="_blank" onclick="$( '#co1' ).attr( 'checked', true );">Link 1</a>
</li>
<li>
<input disabled="disabled" id="co2" name="co2" type="checkbox" <?php if($mychecklist->co2==1) echo 'checked' ?>/>
<a href="http://bbc.co.uk" target="_blank" onClick="$( '#co2' ).attr( 'checked', true );">Link 2</a>
</li>
<li>
<input disabled="disabled" id="co3" name="co3" type="checkbox" <?php if($mychecklist->co3==1) echo 'checked' ?>/>
<a href="http://bbc.co.uk" onClick="$( '#co3' ).attr( 'checked', true );">Link 3</a>
</li>
</ul>
</div>

链接上的onclick事件可以很好地检查复选框,但我想禁用复选框(使用disabled="diasabled"),并仍然使其工作。这样用户必须单击链接才能检查复选框,而不是跳过此步骤并自行检查复选框。
非常感谢您的帮助。

你尝试使用复选框的 "change" 事件了吗? - zneak
2个回答

1

不清楚您是想使用 <a> 链接来检查禁用的复选框,还是触发附加到复选框的点击事件。如果是前者,您可以使用 $( '#tt2' ).attr('checked', !$( '#tt2' ).attr('checked') ) 来切换复选框或 $( '#tt2' ).attr( 'checked', true ) 来选中它。如果是后者,即使复选框被禁用,点击事件仍应该运行。


如果您需要同时选中复选框并触发事件,只需同时使用这两种技术即可。
<a href="http://bbc.co.uk" target="_blank" 
    onclick="$( '#co1' ).attr( 'checked', true ).trigger( 'change' );">

我之前尝试过这个方法,它确实有效,但我还有另一个jQuery函数,用于显示/隐藏某个div,你的方法似乎无法与之配合使用。我会编辑我的问题,展示完整的代码。 - Codded
现在又遇到了另一个问题,attr checked 和 trigger change 都很好用,但是当表单提交时,它不想更新数据库。这与禁用的复选框有关吗?我正在使用......$newentry->co1=(isset($_POST['co1'])) ? 1 : 0; $newentry->co2=(isset($_POST['co2'])) ? 1 : 0; $newentry->co3=(isset($_POST['co3'])) ? 1 : 0; .... 将这三个复选框保存到数据库中。 - Codded
禁用的表单字段不会随POST数据一起提交。我认为,与其使用禁用的复选框来传递数据,您最好使用隐藏的表单字段。 - JJJ
我需要禁用的复选框,因为我正在使用图像代替复选框(使用此http://widowmaker.kiev.ua/checkbox/)。我可以为每个复选框添加一个隐藏字段,并使用链接onclick = "$('#co1')。attr('checked',true).trigger('change');">来设置隐藏值吗?我需要在onclick属性中添加什么? - Codded

1

为你的复选框使用readonly属性!


谢谢回复,但这对我没有用。我使用了@Juhana的答案。 - Codded

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接