2012-09-18 75 views
1

使用Drupal 7表單API,如何在提交AJAX表單前提示javascript確認框?我嘗試過不同的方式來做到這一點,但沒有成功。下面是代碼:如何在Drupal 7中提交AJAX表單之前顯示確認框?

function create_list_form($form, &$form_state) { 

    $form['list_name'] = array(
    '#type' => 'textfield', 
    '#required' => TRUE, 
    '#title' => 'List Name' 
    '#attributes' => array() 
); 

    $form['list_desc'] = array(
    '#type' => 'textfield', 
    '#required' => TRUE, 
    '#title' => 'List Desc' 
    '#attributes' => array() 
); 

    $form['actions']['submit'] = array(
     '#type' => 'submit', 
     '#attributes' => array('class' => array('use-ajax-submit')),    
     '#value' => 'Create List' 
    ); 


    return $form; 
} 

下面是Javascript代碼:

Drupal.behaviors.module = { 
    attach: function() { 

     jQuery('#edit-submit').click(function(){ 
      if(!confirm('Are you sure?')) 
       return false; 
     }); 

    } 
} 
+0

您應該顯示您的JavaScript代碼,因爲這裏最適合。 –

+0

我已經嘗試過各種JavaScript技術來完成這項工作,但沒有成功。我編輯了這個問題並添加了其中一個javascript代碼。 IT顯示確認框,但即使按下「否」按鈕也會提交表格。 – Adnan

回答

4

我已經找到了解決辦法:如果你想使你的函數可重複使用的,您可以使用這一個。我們可以通過覆蓋beforeSerialize()函數來實現:

Drupal.behaviors.module = { 
    attach: function() { 

    Drupal.ajax['edit-submit'].beforeSerialize = function() { 

      if(confirm('Are you sure?')) 
       return true; 
      else 
       return false; 

     } 
    } 
} 
+0

非常重要的是要知道,這部分代碼不應該在$(document).ready事件中,因爲它不會運行。對我而言,它並不適用於此事件的聽衆。根據本教程:https://drupal.org/node/304258#drupal-behaviors,當運行這部分代碼時 –

0

你嘗試在您的按鈕添加一個事件監聽?

function show_confirmation() { 
    if (confirm("Do you want to submit?")){ 
     // here you can do something before it gets submitted 
    } else { 
     // return false prevents the form from submitting 
     return false; 
    } 
} 
var button = document.getElementById('button_name'); 
button.addEventListener('click', show_confirmation); 

編輯:

function your_callback_func() { 
    // This could be any code for example your AJAX code etc 
} 

function show_confirmation(your_callback_func) { 
    if (confirm("Do you want to submit?")){ 
     your_callback_func() 
    } else { 
     // return false prevents the form from submitting 
     return false; 
    } 
} 
var button = $('#button_name'); 
button.click(function() { 
    show_confirmation(your_callback_func); 
}); 
+0

我試過這段代碼。它會提示確認框,但不會等待用戶響應並保持提交AJAX表單。 – Adnan

+0

您必須爲您的AJAX提交代碼創建一個函數,然後在if(confirm)語句中調用該函數。 BTW爲什麼不使用JavaScript庫,如JQuery,Prototype,MooTools等?它們很容易使用,而且速度很快!我一直在與JS苦苦掙扎很長一段時間,因爲我從來不想使用任何lib。但是現在我離不開JQuery。無論如何告訴我,如果你的腳本現在工作。我會編輯我的答案,使腳本更有效率。 – gblblgl

+0

我正在使用JQuery。再次看看我的問題,我編輯了它並添加了javascript部分。在Drupal表單中,我們不會編寫用於提交表單的自定義AJAX,而是我們只需在提交按鈕上使用css類'use-ajax-submit'將常規表單轉換爲AJAX表單。 – Adnan