2011-12-20 44 views
1

我在jQuery Mobile站點中使用了<input type="search" />文本框。 JQM爲這些類型的字段提供了很好的功能,但是,我碰到了一個問題。使用jQuery防止在Safari Mobile中搜索「發佈」行爲

我有不得不在ASP.NET WebForms中創建我的移動網站的不幸的約束。因此,我所有的標記都包含在一個超級元素form中。

現在,當您將文本輸入到移動Safari中的搜索輸入時,iPhone/iPad將在鍵盤底部顯示一個漂亮的「搜索」按鈕。這很方便,然而,它似乎執行某種形式的HTTP post(或表單提交)。由於我的表單正在包裝所有內容,因此JQM將我返回到初始着陸頁 - 無論我在網站中的哪個位置。

現在到了這個問題......我想阻止這種提交發生,並用jQuery替換我自己的一些邏輯。我嘗試了以下(確實會觸發),但是'post'或'submit'仍然繼續,儘管返回false並且防止了默認值。 如何攔截此事件?

// Prevent form posts 
$('form').live('submit', function (e) { 

    // Custom logic here 

    e.preventDefault(); // <-- fires, but does not prevent JQM from returning to landing page 
    return false; 
}); 

回答

1

嘗試增加data-ajax="false"到窗體標籤。這聽起來像jQuery Mobile Framework仍然高枕無憂的submit事件和運行它自己的AJAX提交表單。

<form data-ajax="false"... 

此外,您應該遠離使用.live()。它是從jQuery 1.7開始折舊的,如果您使用的是jQuery 1.6或更高版本,那麼您應該已經使用.delegate()

$('form').live('submit', function (e) { 

更改:

$(document).delegate('form', 'submit', function (e) { 

jQuery Mobile的1.0包裝與jQuery核心1.6.4,但如果你移動到jQuery的核心1.7或大於.on()是綁定的事件所提出的方法。上述事件處理程序的聲明可以使用.on()這樣寫:

$(document).on('submit', 'form', function (e) { 

來源:http://api.jquery.com/on

這裏是一個演示:http://jsfiddle.net/KAuFz/

+0

感謝的人!像魅力一樣工作,並感謝關於「直播」,「代表」和「開」的提示 – 2011-12-20 19:48:47

+0

不客氣。我在處理這個jQuery Mobile警告之前... :) – Jasper 2011-12-20 19:51:45