2012-02-19 94 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() {}? 如果這沒有解決問題:由於小提琴在工作 - 我們需要您的背景來幫助更多。