Chtml复选框单击复选框,但仍标记为未选中,不会更改.通过 ajax 提交


Chtml CheckBox click on checkbox but still marked as unchecked not changing.. Submitting through ajax

    <?php echo CHtml::checkBox('markComplete', FALSE , 
                    array(
                    'class' => 'markComplete',
                    'id'=> 'markComplete'.$events['id'],                        
                    'ajax' => array(
                                    'url'=>$this->createUrl('/events/events/MarkComplete'),
                                    'data'=>'event_status_on='.$events['id'],
                                    'type'=>'POST',
                                    'beforeSend' => 'js:function(){   
                                        var idSelector = $("#markComplete'.$events['id'].'");   
                                        var check = idSelector.is(":checked");  
                                        var child = idSelector.parent("td");
                                        var parent = $(child).parent("TR");
                                        $(parent).css("opacity","0.5");

                                    }',
                                    'success'=>'js:function(resp) {                                                                         
                                        $("#right").prepend(resp);
                                        return true;                                        
                                    }'
                                    ),
                                )
                            );
    ?>

Chtml 复选框单击复选框,但仍标记为未选中不更改.. 如果我将其更改为 TRUE,那么它不会更改为 FALSE...通过 AJAX 提交它...完美地获得响应。

代码中没有错误,但最终为复选框生成的 onclick 处理程序默认返回 false。检查您生成的 html,您将看到以下内容:

jQuery('body').undelegate('#markComplete_someId','click').delegate('#markComplete_someId','click',function(){jQuery.ajax({'url':'/something','data':'event_status_on=someId','type':'POST','beforeSend':function(){
     var idSelector = $("#markComplete");
     var check = idSelector.is(":checked");
     var child = idSelector.parent("td");
     var parent = $(child).parent("TR");
     $(parent).css("opacity","0.5");
},
'success':function(resp) {
      $("#right").prepend(resp);
      return true;
},'cache':false});
 return false; // this line changes everything!!
});

return false;最终会阻止任何 html 元素的默认 onclick 事件行为。客户端更改方法的文档中提到了这一点。您将看到它允许我们为htmlOptions指定某些特殊属性,例如您已经使用过的'ajax',以及'return',它指定onclick处理程序应返回的内容,默认情况下为false,我们可以通过添加'return'属性将其更改为返回true,如下所示:

 <?php echo CHtml::checkBox('markComplete', FALSE , 
                array(
                   'class' => 'markComplete',
                   'id'=> 'markComplete'.$events['id'],                        
                   'ajax' => array( /* add your code */ ),
                   'return' => true // add return like this
                )
   );
?>

这将使它发挥作用。