看看这个小提琴:http://jsfiddle.net/5rmEe/61/
var inputVal = false;
//allow user to deselect a radio button by clicking a checked radiobutton
$('input[type=radio]').each(function(){
var inputObj = $(this);
inputObj.click(function(e){
if(inputVal === inputObj.val()){
inputVal = false;
inputObj.attr('checked', false);
}
else{
inputVal = inputObj.val();
inputObj.attr('checked', 'checked');
}
e.stopPropagation();
});
});
$('.asdf').click(function(){
$('.haha').trigger('click');
});
请注意,asdfsdaf span会触发单击按钮
首先,设置单选按钮,如果单击选中的单选按钮,它将取消选中(试一试),单击单选按钮时可以正常工作
现在如果单击跨度,它将使复选框正确检查,但如果再次单击该跨度,它将不会将单选按钮设置为未选中,即使它显然执行了单击事件,理论上它应该由于点击事件而相应地取消选中单选按钮(如果您实际单击单选按钮,则此事件有效)
为什么会这样?如果使用.trigger()?
手动触发事件,则attr()方法不起作用如何解决此问题,以便在选中单选按钮时点击跨度也会触发取消选中单选按钮?
答案 0 :(得分:3)
使用triggerHandler
代替trigger
。
$('.haha').triggerHandler('click');
这将导致处理程序被触发而不会导致单击的默认行为。
答案 1 :(得分:0)
您可以通过在点击处理程序中调用preventDefault()
来阻止默认点击操作,如下所示:
inputObj.click(function(e){
e.preventDefault(); //add this to prevent default click behaviour
if(inputVal === inputObj.val()){
inputVal = false;
...
...
见工作fiddle