2012-02-19 206 views
1

我有一个ajax表单我想阻止在提交时执行一个动作,并尝试了很多方法,没有任何工作。我的第一个方法是:jQuery防止输入默认动作

return false; 

,然后我试图

event.preventDefault(); 

事件是回调名称或者无论你怎么称呼它。

function(event) { 
    event.preventDefault(); 
}; 

继承人的HTML我使用的是现在:

<form class="main_search" method="POST" action="ajaxsearch.php"> 
    <input type="text" class="editable" placeholder="Search"> 
</form> 

继承人的测试JavaScript我设置:

$('.main_search').submit(function(event) { 
    event.preventDefault(console.log(event)); //Log the event if captured 
}); 

这两种方法都工作,但奇怪的是,他们的工作不同的东西像按钮,但它们不适用于这种形式。我在这里错过了什么吗?谢谢!

+3

这是奇怪的:' event.preventDefault(console.log(event));'那些应该是两行('event.preventDefault();'不带任何参数)。 – 2012-02-19 02:28:19

+0

@JaredFarrish这将是一个很好的理由,但它仍然不起作用 – 2012-02-19 02:29:29

+2

我没有说这是*原因*,我说*这很奇怪*。否则,我会发布它作为答案*。 ';'' – 2012-02-19 02:31:12

回答

2

若要处理您的具体问题(即,插入动态生成的表格),请使用$.on()。你关不使用document.body作为父观察者(如$.live()基本一样)与$.on()更好,所以下面将是适当的(考虑到实际的标记):

<div id="searches"> 
    <form class="main_search" method="POST" action="ajaxsearch.php"> 
     <input type="text" class="editable" placeholder="Search"> 
    </form> 
</div> 

var $main_search = $('.main_search'), 
    $searches = $('#searches'); 

$searches.on('submit', '.main_search', function(event) { 
    event.preventDefault(); 
    console.log(event); //Log the event if captured 
}); 

setInterval(function(){ 
    $searches.append($main_search.clone()); 
}, 5000); 

http://jsfiddle.net/5TVGn/2/

+0

非常感谢! – 2012-02-19 02:50:16

1

我成立了一个的jsfiddle:

http://jsfiddle.net/XM679/

难道你忘了把它包装成$(document).ready(function() {}? 如果这没有解决问题:由于小提琴在工作 - 我们需要您的背景来帮助更多。