触发单选按钮单击并设置选中的属性问题

时间:2012-10-24 21:26:02

标签: javascript jquery html forms radio-button

看看这个小提琴: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()方法不起作用

如何解决此问题,以便在选中单选按钮时点击跨度也会触发取消选中单选按钮?

2 个答案:

答案 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