<?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
)
);
?>
这将使它发挥作用。