【问题标题】:How to pass literal JavaScript code to Yii framework methods?如何将文字 JavaScript 代码传递给 Yii 框架方法?
【发布时间】:2012-05-13 21:14:14
【问题描述】:

我正在使用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 beforeSendsuccess 是 JavaScript 代码而不是纯字符串?

【问题讨论】:

    标签: php jquery ajax yii


    【解决方案1】:

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

    现在所有框架类都通过CJavaScriptExpression 支持自定义 JavaScript sn-ps。像这样使用它:

    '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);
    
        }'
        ),
    )
    

    不幸的是,这没有很好的记录,这就是人们不时遇到exactly this problem的原因。

    【讨论】:

    • 如果 console.log 它...它在 firebug 控制台上显示错误。 ** elem.nodeName 未定义 [中断此错误] ...ks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[elem.typ...jquery.js(第 2317 行)**
    • 当我在控制台打印 $(this) 时,它返回给我 ajax 对象
    • @AlizainPrasla:这意味着你的代码需要调试,而不是把js: 放在前面不是你应该做的。所以继续调试它;不幸的是,我对此无能为力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多