2012-09-24 51 views
1

我有一套其中我在点击提交HTML表单链接具有id为“给ajaxForm”jQuery的防止各种形式的一次提交

for ($year = 2008; $year <= intval(date('Y')); $year++) { 
    if ($year == $currentYear) 
     continue; 
    echo '<div style="float:right;padding-right:20px;"><form name="year' . $year . 'Form1" id= "ajaxForm" action="/managementDashboard#visibleTab-5" method="post"><input name="getRecordsFor" type="hidden" value="' . $year . '"><a id="buttonRed" href="javascript:document.year' . $year . 'Form1.submit();">' . $year . '</a></form></div>' . chr(10); 
} 

然而,而不是默认提交使用jQuery发布与此数据:

 jQuery("form#ajaxForm").click(function(event) { 

     /* stop form from submitting normally */ 
     event.preventDefault(); 

     /* Send the data using post and put the results in a div */ 
     jQuery.post('/ajaxFunctions?mgmtDbrdPge=5', jQuery("#ajaxForm").serialize(), 
     function(data) { 
      jQuery("#visibleTab-5").empty().append(data); 

     } 
    ); 
    }); 

问题是,它提交所有的形式,而不是我单独的个人。有没有一种方法可以防止这种情况,而不必为每个单独的表单编写jQuery链接?

更新 - 我接受了其中一个答案,因为他的方法是合法的,但我意识到我的问题是什么。而不是jQuery(“#ajaxForm”)。serialize(),我应该把它写成jQuery(this).serialize()来调用点击提交的数据,而不是使用该id的所有表单。

+0

你不能有与页面上的多个元素相同的ID。尝试首先解决问题,看看你的问题是否会消失。 – MrOBrian

+0

HTML标记循环在echo语句中。问题是我使用该ID来提交表单。那么我需要为每个表单执行相同的jQuery代码吗?有没有更短的路? – wiseman7687

回答

3

看起来您有多个表单,其ID为ajaxForm。 确保它是独一无二的

如果你知道的Ajax表单的ID在你的页面..然后你可以做到这一点

jQuery("form#ajaxForm ,form#myForm , form#myFormThird ").click(function(event) { 

这将确保多个元素连接到相同的事件处理程序..

更新的代码 如果你不知道ID的话可以重复使用for循环,并附事件..

$('form').each(function() { 

    $(this).click(function(event) { 

     // Your Function 
    } 
}); 

另外,还要确保你使用。对()用于连接您的活动..而不仅仅是点击,这样的事件是委派..

jQuery("form#ajaxForm").on('click',function(event) { 
+0

有没有办法重复jQuery数据呢?我不想为每个单独的表单重写相同的jquery代码。它挫败了当时拥有php forloop的目的。 – wiseman7687

+0

也许使用循环计数器来标识ID将有所帮助..在这种情况下,您可以直接获取表单的index()来检索其ID后缀。 – Sushruth

+0

Chekc更新后的帖子 –