2010-12-09 93 views
1

我已經做了一個類來處理加載和提交一個html表單。見下面使用mootools提交表單

ND.Form = new Class({ 
    //--- Implements options og events. 
    Implements: [Options, Events], 

    //--- Options. 
    options: { 
     url: '', 
     injectTo: '' 
    }, 

    //--- Initialize the class. 
    initialize: function (panel, options) { 
     //--- Set options 
     this.setOptions(options); 
     this.panel = panel; 
     this.loadForm(); 
    }, 

    loadForm: function() { 
     var req = new Request.HTML({ 
      url: this.options.url, 
      method: 'get', 
      onSuccess: function (html) { 
       $(this.options.injectTo).empty(); 
       $(this.options.injectTo).adopt(html); 
       var formId = $(this.options.injectTo).getFirst('form').get('id'); 
       $(formId).addEvent('submit', function (e) { 
        e.stop(); 
        this.submitForm(formId); 
       } .bind(this)); 
      } .bind(this) 
     }).send(); 
    }, 

    submitForm: function (formId) { 
     $(formId).set('send', { 
      onSuccess: function (resp) { 
       this.panel.loadContent(); 
       if (resp != null) { 
        $('lbl_error').empty(); 
        $('lbl_error').setStyles({ 'display': 'block', 'color': 'red' }).set('html', resp); 
       } 
      }.bind(this), 

      onFailure: function (resp) { 
       if (resp != null) { 
        $('lbl_error').empty(); 
        $('lbl_error').setStyles({ 'display': 'block', 'color': 'red' }).set('html', resp); 
       } 
      } 
     }); 
     $(formId).send(); 
    } 
}); 

代碼當我按下保存按鈕比1多這一切工作得很好,exept的「this.panel.loadContent();」在「submitForm:function(formId)」中觸發了相同的x次按鈕次數,我該如何防止這種情況?

/馬丁

回答

4

從MooTools的1.3啓動 「設置( '發送')」 又增加了一個事件。 所以你需要寫:

$('myForm').set('send', { 
    onSuccess: function (html) {}, 
    onFailure: function(xhr){} 
}).addEvent('submit', function(e){ 
    e.stop(); 
    this.send(); 
}); 

代替:

$('myForm').addEvent('submit', function(e){ 
    e.stop(); 
    this.set('send', { 
     onSuccess: function (html) {}, 
     onFailure: function(xhr){} 
    }); 
}).send(); 

然後請求將被一次,每次當你處理形式發送。

4
Basically we need to do three things: 
  1. 監聽提交按鈕的「點擊」事件。
  2. 停止提交表單。
  3. 發送使用表單$(formElement)。發送()

一個解決方案可以是這個樣子:

$('submit').addEvent('click', function(evt){ 
    // Stops the submission of the form. 
    new Event(evt).stop(); 

    // Sends the form to the action path, 
    // which is 'script.php' 
    $('myForm').send(); 
    }); 
+0

那麼,我的「this.panel.loadContent();」當我嘗試你的建議時仍然會多次發射。第一次我點擊按鈕加載一次,第二次按下按鈕加載兩次等。 – 2010-12-09 10:36:06

0

我已經使用了request.send()方法,但是試圖找到一種方法來複制用戶敲擊表單提交按鈕的操作,但同時也允許預先執行一些JavaScript邏輯。我沒有找到任何具體解決這個問題的討論。我發現的答案是使用form.submit()方法。