2011-12-20 56 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