2012-02-28 9 views
1

私はボタンを定義したCButtonColumnを持つCGridViewを使用しています。 "クリック" jsは呼び出されていません。 URLは呼び出されて完了します。ユーザーに確認を表示したいが、決して表示されない。ドキュメントによると、「クリック」はクリック時に呼び出されるJS関数ですが、それは私のためには機能しません。CGridView CbutonColumnカスタムボタンクリックしない

$this->widget('zii.widgets.grid.CGridView', array(
      'dataProvider'=>$model->search(), 
      'filter'=>$model, 
      'columns'=>array(
        'id', 
        'name', 
        'question', 
        'created',      
        array(
          'class'=>'CButtonColumn', 
          'header'=>'Reset', 
          'template'=>'{reset}', 
          'buttons'=>array(
            'reset'=>array(
              'label'=>'Reset', 
              'click'=>'function(){alert("Are you sure?");}', 
              'imageUrl'=>Yii::app()->request->baseUrl.'/images/reset.png', 
              'url'=>'Yii::app()->createUrl("favs/reset", array("id"=>$data->id))',           
              'options'=>array(
                'ajax'=>array(
                  'type'=>'POST', 
                  'url'=>"js:$(this).attr('href')",                
                ), 
              ), 
            ), 
          ),      
        ),      
      ), 
    )); 

答えて

1

これはあなたのコードのためのYiiによって生成されたjQueryを使って何かを持っています

jQuery('#your-grid-id a.reset').live('click',function(){alert("Are you sure?");}); 
/* more jquery ... 
... 
... 
*/ 
jQuery('body').undelegate('#yt1','click').delegate('#yt1','click',function(){jQuery.ajax({'type':'GET','url':$(this).attr('href'),'cache':false,'data':jQuery(this).parents("form").serialize()});return false;}); 
// similar jquery follows for the other rows of the grid view 

あなたが見ることができるように、<a>タグのクリックイベントハンドラを使用して、最初にあなたが提供する、アラート機能ですclickオプション
その後、undelegateを使用してこのクリックイベントハンドラが削除され、delegateを使用して別のハンドラが追加されました。これはajaxオプションを追加したために発生しています。
ajaxオプションを削除するとダイアログボックスが表示され、生成されたコードからundelegate ... delegate sequenceが削除されていることがわかります。あなたが他の何かを行うことができますあなたの機能を実現するために

  1. 確認ダイアログを表示するjQueryのAJAXのbeforeSendオプションを使用すると、アラートがところで、確認できません。
  2. jqueryのajaxのsuccessオプションを使用すると、ビューを更新したり、リセットが完了したことをユーザーに伝えることができます。
+0

これは役立ちます..もっと明確にする必要があるかどうかを知ってください。 –

+1

にスポットがあります。ありがとう。アラートに関しては、私はそれを修正するために必死になっていたので、私が考えることができる最も単純なjs関数を追加しました。別のメモでは、特にソースや火かき棒を読み込むのではなく、jquery jをデバッグするために何かを使用しますか? – Orlymee

+0

この例ではアラートを使用していたことに感謝します。実際に私はクライアント側ではあまり働かないので、ツールの多くはわかりませんが、ファイヤーバグはほとんどの場合私のために働きます。もし私が何かに出くわしたら、私が覚えていれば、私はあなたにメッセージを送るでしょう。 –

関連する問題