1
    <?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を介して送信してください...応答を完全に取得しています。

4

1 に答える 1

1

コードにエラーはありませんが、checkBox用に最終的に生成される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!!
});

これにより、html要素return false;のデフォルトのonclickイベントの動作が妨げられます。これは、clientChangeメソッドのドキュメントに記載されています。'ajax'すでに使用しているようなhtmlOptionsの特定の特別な属性を指定できることがわかります。また'return'、onclickハンドラーが返すものを指定します。これはデフォルトではfalseですが、これを変更してtrueを返すことができます。次のようなプロパティを追加し'return'ます。

 <?php echo CHtml::checkBox('markComplete', FALSE , 
                array(
                   'class' => 'markComplete',
                   'id'=> 'markComplete'.$events['id'],                        
                   'ajax' => array( /* add your code */ ),
                   'return' => true // add return like this
                )
   );
?>

それはそれを機能させるでしょう。

于 2012-05-04T15:54:39.763 に答える