2013-10-25 23 views
1

我在我的網站上有幾個相同的表單,並提交其中一個導致一些奇怪的behvaiour。這是我的設置:jquery:在網站上提交幾種相同的表單之一

我在我的網站上有一個窗體,ID爲「#模式」。提交#modelform時,會出現第二個窗體,其類標識符爲「.waldform」。 #modelform可以提交多次,允許在我的網站上存在幾個相同的.waldforms。提交.waldform調用python函數,並將返回的值附加到網站主體。

問題如下:假設我已提交#modelform兩次,並且在我的網站上有兩個.waldforms。提交已創建的第一個.waldform將其返回的值附加到我的網站主體兩次。提交第二個.waldform只會將其返回值附加到主體一次。同樣,如果有3個.waldform,第一個.waldform將追加它的值3次,第二個.waldform將追加它的值兩次,第三個將追加一次。

我希望每個.waldform只追加一次它的值,無論網站上有多少存在。

有什麼想法?

這裏是我的jQuery:

var $counter = 0 

$("#modelform").submit(function() { 

    $counter++; 

    $('body').append($counter) ; 

    //MODEL FORM 
    $.post('/estimate', {name: $("#mymodel").val()}, function(data) { 

     var $a_var = data['title'] 
     var $element = $('<div class="item">' + $a_var + '</div><br>'); 

     $('body').append($element) ; 




     //WALD FORM 
     $('body').append('<form class="waldform" action="#" method="post"><input type="text" id="waldnum" value="' + $counter + '"/><input type="submit" value="Wald Test" /></form>'); 

     $(".waldform").submit(function() { 

     //post the form values via AJAX... 
     $.post('/wald', {name: $(this).find('#waldnum').val()}, function(data) { 

      var $a_var = data['title'] 
      var $element = $('<div class="item">' + $a_var + '</div><br>'); 

      $('body').append($element); 



      }); 

      return false ; 
     }); 



    }); 

    return false ; 
}); 

回答

2

在調用函數的ModelForm提交時,您將追加類waldform的形式,再附上一個提交處理程序到整個類。所以,你提交modelform,製作一個waldform並提交給第一個waldform。然後,你提交modelform,製作第二個waldform,並將提交事件附加到整個班級,所以你的第一個wald現在有2個,第二個有1個,依此類推。因此,追加一個新的waldform之後,您將提交事件之前,刪除任何先前提交處理程序與

$('.waldform').off(); 

應該解決您的問題。

您可能想查看關於unbind()和off()的文檔。

另一種方法是創建一個新的dom元素,將一個提交綁定到它,然後將其附加到body,而不是綁定到整個類。