防止搜索'发布'使用jQuery在Safari Mobile中的行为

时间:2011-12-20 19:24:18

标签: jquery asp.net webforms jquery-mobile mobile-safari

我在jQuery Mobile网站中使用<input type="search" />个文本框。对于我想保留的这些类型的字段,JQM提供了开箱即用的强大功能,但是,我遇到了麻烦。

我不得不在ASP.NET WebForms中创建我的移动网站。因此,我的所有标记都包含在一个超级form元素中。

现在,当您在Mobile Safari中输入文本到搜索输入时,iPhone / iPad将在键盘底部显示一个漂亮的“搜索”按钮。这很方便,但它似乎对表单执行某种HTTP发布(或表单提交)。由于我的表单包装了所有内容,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 个答案:

答案 0 :(得分: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 Core 1.6.4打包在一起,但如果转到jQuery Core 1.7或更高版本,则.on()是绑定事件的建议方法。上面的事件处理程序声明可以使用.on()编写,如下所示:

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

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

以下是演示:http://jsfiddle.net/KAuFz/