2013-02-17 55 views
1

我在这上面敲了半天。当表单动态加载ajax时,jquery窗体选择器无法正常工作

我想阻止提交表单,所以我可以使用ajax提交它,但不能让选择器工作。

我的标记是这样的:

<div class="my_cart"> 
<ul> 
<li> 
<form action="/cart/remove_item" method="post" accept-charset="utf-8"> 
<input type="hidden" name="rowid" value="eb0d73613fd555ed3dc24d3877447fc7"> 
<input type="submit" name="foofoo" value="*"> 
</form> 
</li> 
<li>London</li> 
<li class="crossed_price">46.00</li> 
<li class="discount_price">free</li> 
</ul> 
<ul> 
<li> 
<form action="/cart/remove_item" method="post" accept-charset="utf-8"> 
<input type="hidden" name="rowid" value="71d2b4c973728137ec1905264be464b8"> 
<input type="submit" name="foofoo" value="*"> 
</form> 
</li> 
<li>Paris</li> 
<li class="price">59.00</li> 
</ul> 
</div> 

而且JS是这样的:

$(document).ready(function() { 
alert("Hello"); // this is to see if the function is triggered on page load. it is. 
$("div.my_cart form").submit(function() { 
    alert ("no go"); 
    return false; 
}) 
}); 

据我了解,$("div.my_cart form")应该赶上所有形式下的任何格,它的类“my_cart”,但它似乎没有工作,并且表单像往常一样提交。

这不是浏览器问题,因为我在多种浏览器(Chrome,FF,Safari)上测试过它。

我在这里错过了什么?

+0

你的HTML是无效的'input'关闭标签缺失......顺便说一句你的代码似乎做工精细:http://jsfiddle.net/8RtML/ – nemesv 2013-02-17 15:40:23

+0

我不认为这是问题所在。它在别的地方为我工作,输入标签没有关闭。 此外,窗体是使用Codeigniter窗体帮助器创建的。我猜他们是对的。 – einav 2013-02-17 15:44:52

+0

所以我的确做对了。但由于某种原因,它不起作用。任何想法如何调试它? 'alert(“Hello”)'正在工作。 – einav 2013-02-17 15:46:34

回答

3

您在$(document).ready(function() {中的代码只在加载DOM时运行一次。如果您使用AJAX加载页面的其他部分,则此方法不会再次触发它。

因此,因为您正在动态添加my_cart事件subsciption不会在文档就绪事件中工作。

您需要使用jQuery的on() method认购的动态添加元素的事件:

$(document).ready(function() { 
    alert("Hello"); 
    $(document).on("submit", "div.my_cart form", function() { 
     alert("no go"); 
     return false; 
    }); 
}); 
+0

再次感谢。:-)我编辑了这个问题,因为它确实是关于ajax而不仅仅是jquery选择器。 .. – einav 2013-02-17 16:13:51

+0

只是一个想法:你认为总是使用'$(document).on(“submit”,“form-selector”,function()'而不是'$(“form-selector”)是个好习惯.submit(function()'? – einav 2013-02-17 16:17:34

+1

'submit'方法是'.on('submit',handler)'的快捷方式,不同之处在于哪个元素使用它:例如''(document)'' (''''''''''''''将您的处理程序全局附加到整个docuemnt上。通过$(“form-selector”)。on(“submit”,)''将它附加到DOM的更小部分(因此它具有性能优势) DOM元素是动态加载的,你不能使用它。 – nemesv 2013-02-17 16:25:49