我正在使用相应的CHtml
方法生成一个复选框,我想在AJAX请求之前和之后运行一些JavaScript代码。这是代码:
echo CHtml::checkBox('markComplete', FALSE,
array(
'class' => 'markComplete',
'ajax' => array(
'type' => 'POST',
'url' => $this->createUrl('/events/events/MarkComplete'),
'data' => 'event_status='.$events['id'],
'beforeSend' => 'function(){ $(this).parent("TR").hide(); }',
'success' => 'function(resp) { $("#right").append(resp); }'
),
)
);
我怎么能告诉 Yii beforeSend
和success
是 JavaScript 代码而不是纯字符串?
从 Yii 1.1.11 开始提供更好的选择
所有框架类现在都支持通过CJavaScriptExpression
自定义 JavaScript 代码段。像这样使用它:
'ajax' => array(
'beforeSend' => new CJavaScriptExpression(
'function(){ $(this).parent("TR").hide(); }'
),
// ...
)
默认情况下,以 js:
为字符串添加前缀的选项仍然可用,但现在可以使用 CJavaScript::encode
上的可选参数根据需要禁用它。
原答案
如果你想在选项中包含文字 JavaScript 代码,Yii 中的约定是在代码前面加上 js:
。所以你会这样写:
'ajax' => array(
'type'=>'POST',
'url'=>$this->createUrl('/events/events/MarkComplete'),
'data'=>'event_status='.$events['id'],
'beforeSend' => 'js:function(){
$(this).parent("TR").hide();
}',
'success'=>'js:function(resp) {
$("#right").append(resp);
}'
),
)
不幸的是,这没有很好的记录,这就是为什么人们不时会遇到这个问题的原因。