2011-08-22 33 views
0

我有一個CJuiDialog以下是代碼的Yii - CJuiDialog關閉上提交按鈕點擊

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'mymodal', 
    'options'=>array(
     'title'=>'Your 10 seconds take you into ....', 
     'width'=>700, 
     'height'=>400, 
     'autoOpen'=>true, 
     'resizable'=>false, 
     'modal'=>true, 
     'closeOnEscape' => false,  
    ), 

)); ?> 

在這個對話框我有形式和我有下面的表單提交按鈕

<?php echo CHtml::submitButton('Submit', array('onclick'=>'js:function(){ alert("test"); $(#mymodal).dialog("close");}', 
     )); ?> 

上點擊這個按鈕,我想關閉這個對話框並提交表單。但是,上面的代碼是我在Button中編寫的,不起作用。任何語法錯誤?

我試圖其他的方式,我用按鈕對話框,並能關閉使用

`js:function(){$(this).dialog("close")` 

對話,但我不能提交表單那裏。所以採取了第一種方法。

任何人都可以幫我解決問題嗎?

感謝和問候

基蘭

+0

我有一個解決方案,如果你仍然對一個感興趣。 –

+0

謝謝Bool Dev。對不起,我剛剛看到您的評論。你能否發佈答案,這將是有益的。再次感謝 – Bujji

+0

嘿,再次看看你的問題,你能告訴我你的「按鈕不工作」是什麼,我的意思是你會得到什麼錯誤?查看何時有提交按鈕,新頁面已加載,因此無論如何您都不會看到對話框,除非您再次加載相同的頁面。那麼你也可以在處理表單提交的操作中分享你的代碼嗎?對不起,遲到的回覆,我正在度假:) –

回答

1

首先,不要把js:onclick值。正確的前綴是javascript:,在on*中不需要,其值始終爲腳本,默認情況下爲Javascript。其次,你定義了一個永遠不會被調用的匿名JS函數。

然後學會使用JS控制檯查看錯誤,並使用JS調試器逐步運行代碼。在Firefox中,您可以使用Firebug擴展。在Chrome或Opera中,按Ctrl-Shift-I打開包含JS工具的開發人員塊。那麼很容易就可以修復你當前的JS代碼:

function(){ 
    alert("test"); 
    $(#mymodal).dialog("close"); 
} 

查看錯誤?應該沒有上面提到的功能,並且你忘了引用一段文字。你必須瞭解的

+0

對不起,我回應了。即使這一個沒有幫助:(與Yii框架格式有關的事情 – Bujji

6

首先/記住,在默認情況下一個HTML提交按鈕導航到負載表單的操作URL。因此,只要您的動作網址被正確指定,默認按鈕將僅提交表單並導航到該網址。

  1. 如果發生這種情況,動作URL和當前頁面的URL是不一樣的,你會不會再次看到該對話框反正(由於導航)。

  2. 但櫃面你的動作URL和當前的URL是相同的*,則默認提交後明顯相同的URL將被再次加載,因爲你的對話框是'autoOpen'=>true,它會再次打開。

因此,我能看到的最佳行動方案是使用jquery's ajax來提交表單。這可以通過3種方式進行:

  1. 使用ajaxSubmitButton()直接形式:

    echo CHtml::ajaxSubmitButton('SubmitThis', 
        $url, // form's action url, you can use createUrl 
        array(// ajaxOptions, use success to close the dialog 
         'success'=>'function(){$("#mymodal").dialog("close");}' 
        ) 
    ); 
    
  2. 使用對話框的按鈕提交表單。下面的示例使用$.post()速記發佈一個Ajax請求,並.serialize()序列化表單數據:

    // other cjuidialog options 
    // ... 
    'buttons'=>array(
        'Submit'=>'js:function(){ 
           $.post(
            $("#form-id").attr("action"), // the url to submit to 
            $("#form-id").serialize(), // the data is serialized 
            function(){$("#mymodal").dialog("close");} // in the success the dialog is closed 
           ); 
          }', 
        // other buttons 
    ) 
    
  3. 您也可以使用正常的提交按鈕,但你必須阿賈克斯再次使用:

    'onclick'=>'$.post(
           $("#form-id").attr("action"), // the url to submit to 
           $("#form-id").serialize(), // the data is serialized 
           function(){$("#mymodal").dialog("close");} 
          ); 
          return false; // to prevent the navigation to the action url 
          ' 
    


[*]如果您正在使用 CActiveForm並沒有指定 'action'這是預設

+1

看到這個問題仍然產生流量,我已經添加了這個答案,我認爲它徹底解決了問題(如果我正確理解你的問題),無論如何,一看@Thijs檢查這個答案,我想你可以得到一些指點 –

+1

謝謝你的詳細解決方案! – Thijs

+0

@Thijs,歡迎你,總是樂於幫忙! –