2

我正在使用 的相应方法生成一个复选框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是 JavaScript 代码beforeSendsuccess不是纯字符串?

4

1 回答 1

4

从 Yii 1.1.11 开始提供更好的选择

现在,所有框架类都支持通过CJavaScriptExpression. 像这样使用它:

'ajax' => array(
    'beforeSend' => new CJavaScriptExpression(
        'function(){ $(this).parent("TR").hide(); }'
    ),
    // ...
)

默认情况下,字符串前缀选项js:仍然可用,但现在可以根据需要使用可选参数 on 禁用它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);

    }'
    ),
)

不幸的是,这没有很好的记录,这就是为什么人们不时遇到这个问题的原因。

于 2012-05-04T10:49:44.237 回答