2012-08-08 58 views
4

我有一個AJAX提交按鈕如下,過程輸出中框架

echo CHtml::ajaxSubmitButton(
     '>', $this->createUrl('/shop/category/nextCategory&id=16&store=true&gift_store='.$_GET['gift_store'].'&startValue='.$start_value.'&endValue='.$endValue), array(
     'type'=>'GET', 
     'update'=>'#test', 
     'beforeSend' => 'function(){ 
         alert("beforeSend"); 
         }', 
     'complete' => 'function(){ 
          alert("complete"); 
         }', 
     ) 
    ); 

以我在控制器動作我使用如下REDER部分,

$this->renderPartial('view',array('model'=>$this->loadModel()),false,true); 

正如我已經設置processOutput到真的,ajax提交按鈕工作正常。但它繼續執行(我點擊的次數)。我希望它在點擊提交按鈕時只執行一次。 如果有人能幫我解決這個問題,那將會很棒。我一直在努力解決這個問題。

+1

可能的XSS:'t_store ='。$ _ GET ['gift_store']。'&' – 2012-08-08 09:19:12

+0

在?我不明白.... – era 2012-08-08 09:22:05

+0

哦!你知道了嗎?生病會改變這一點。那不能回答我的問題。 – era 2012-08-08 09:23:55

回答

1

使用jQuery的幫助下,你可以定義下面的代碼爲「完成」功能:

function() { 
    $('input[type=submit]").attr("disabled", "disabled"); 
} 

所以在您的按鈕的順利完成將爲重新推被禁用,如果我理解正確。

不要忘記修改css選擇器輸入[type = submit]到CSS選擇器的按鈕。

解決方案2:WAP的你了CHtml :: ajaxButton到

if (!Yii::app()->request->isAjaxRequest) { 

} 

然後,當你通過AJAX加載內容的按鈕將不會被顯示在頁面

+0

好的...不,我認爲你有錯誤的想法。對不起這是我的錯。好的問題是,我點擊提交按鈕。當我這樣做時,它使用相同的按鈕加載相同的視圖。當我再次點擊它時,它會執行兩次該方法。我想要一種預防方法。任何想法? – era 2012-08-08 09:57:49

+1

當你將CHtml :: ajaxButton包裝到if(!Yii :: app() - > request-> isAjaxRequest){}時,當你通過ajax加載內容時,你的按鈕將不會顯示在頁面上。 – 2012-08-08 10:04:13

+0

不,我想讓按鈕呈現。會發生什麼是,第二次我點擊它調用動作兩次的按鈕。我希望它只調用一次動作。 – era 2012-08-08 10:17:02

1

更好,如果你對Ajax創建normalizeUrl上請求。

echo CHtml::ajaxSubmitButton(
      '>', CHtml::normalizeUrl(array('/shop/category/nextCategory',array('store'=>1,'gift_store'=>1,'startValue'=>1,'endValue'=>1))), array(
      'type'=>'GET', 
      'update'=>'#test', 
      'beforeSend' => 'function(){ 
          alert("beforeSend"); 
          }', 
      'complete' => 'function(){ 
           alert("complete"); 
          }', 
      ) 
     ); 

此代碼是完美的,我檢查過。看起來他們可能在你的js代碼的某處出錯。

+0

ya theres沒有錯。它與renderPartial一起使用。因爲我已經將processOutput設置爲true,它會繼續執行客戶端腳本。 – era 2012-08-08 09:55:29

4

好的我解決了這個問題。發生什麼事是, ajax請求是基於ID觸發的。每當div通過ajax重新加載時,新的代理/事件將被加載,指向與他之前相同的ID。所以當你實際點擊按鈕時,兩個代表都會完成他們的工作,因爲兩者都與點擊的按鈕匹配。

這個問題有兩種解決方法。一是按鈕就像是如下產生的每一次,

array('id' => 'next-category-'.uniqid()); 

另一種方式具有唯一的ID,這是我如何解決它,

array("id"=>"next-category", "live"=>false); 

直播:布爾,無論是事件處理程序應附帶現場/代表或直接的風格。如果沒有設置,則會使用liveEvents。將其提交給提交按鈕即可解決該問題。