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

beforeSendsuccessが JavaScript コードであり、プレーンな文字列ではないことを Yii に伝えるにはどうすればよいでしょうか?

4

1 に答える 1

4

Yii1.1.11以降で利用可能なより良いオプション

すべてのフレームワーククラスは、を介してカスタムJavaScriptスニペットをサポートするようになりCJavaScriptExpressionました。次のように使用します。

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

    }'
    ),
)

残念ながら、これは十分に文書化されていないため、人々は時々この問題に遭遇します。

于 2012-05-04T10:49:44.237 に答える