【问题标题】:jQuery Mobile and Form SubmissionjQuery Mobile 和表单提交
【发布时间】:2011-02-08 16:55:55
【问题描述】:

我决定跳入支持 Wordpress 的移动主题的 jQuery Mobile 框架。

我现在遇到了提交带有 url 中的哈希标记的表单并尝试进行验证和 ajax 发布的问题。基本上是不行的。

例如:website.com/contact/

我知道 href 的 rel="external" 标记消除了 url 中的 #。但是我的博客文章带有一个自定义插件,它呈现我将无法使用 rel="external" 的注册表单。我想我可以将它用于所有链接,但这会消除平滑过渡。

我有哪些选择可以尝试让它发挥作用?我正在尝试将 .submit 绑定到表单,进行一些验证,然后通过 ajax 发布它。

更新--

<form id="myform" action="myfile.php" method="post">
<input type="text" id="mytext" name="mytext" />
<input type="submit" id="myform_submit" value="Submit">
</form>

还有我的脚本:

jQuery(document).ready(function() { 
 jQuery("#contact_submit").submit(function(){
        alert('WTF');
        }); 
 });

将其更改为:

<form id="myform" action="myfile.php" method="post">
<input type="text" id="mytext" name="mytext" />
<input type="button" id="myform_submit" value="Submit">
</form>

还有我的脚本:

jQuery(document).ready(function() { 
 jQuery("#contact_submit").click(function(){
        alert('WTF');
        }); 
 });

两者都不适用于 url 中的 #。

我还在 jquery.mobile.js 文件之前添加了这个:

<script type="text/javascript">
jQuery(document).bind(
   "mobileinit", function(){
   jQuery.extend( jQuery.mobile, { ajaxFormsEnabled: false });
   });
</script>

还是不行。

(仅供参考,jQuery 而不是 $ 是因为 WordPress)

--另一个更新。

由于我使用的是 Wordpress,因此某些功能表现得很奇怪。就像 is_home()。无论我在该功能上的哪个“页面”都会返回真实。我认为这与每个页面的 ajax 调用有关。

【问题讨论】:

    标签: jquery ajax jquery-mobile


    【解决方案1】:

    我不完全确定您在哪里调用 jQuery.ready 函数,但推荐的注册处理程序的方法是绑定到特定页面的 pagecreate 事件。 pagecreate 事件应仅由第一页中的jQuery.ready 处理。我最近使用 jQuery mobile 构建了一个网站,我遇到了这个问题。下面的代码应该能让你到达你想去的地方:

    jQuery(document).ready(function() {
        $("#id_of_page").live('pagecreate', function() {
            $("form").submit(function(event) {
                event.stopPropagation();
                event.preventDefault();
    
                // Do stuff here (usually AJAX);
    
                return false;
            });
        });
    });
    

    不幸的是,我没有进行足够的实验来确定是否所有这些都是必要的。我知道这对我有用。我几乎本能地将return false 添加到由AJAX 处理的所有表单提交中。希望对您有所帮助!

    【讨论】:

    【解决方案2】:

    您可以关闭 AJAX 包装。在这里阅读:http://jquerymobile.com/demos/1.0a3/#docs/api/globalconfig.html

    另外 - 我看到了一些关于斜线问题的东西,但现在我找不到了,所以一定要使用 JQM 的 alpha3 版本

    [编辑]

    这在之前已经提到过几次 - 在其他一些线程中。如果您转到一个页面并且 JQM 使用 AJAX 加载它,那么只有 body 被采用并且没有 document.ready 触发,因为 dom 已经准备好;)(我在这里引用自己)

    【讨论】:

    • 不确定是不是这样。我将 更改为 并添加了一个只有警报的点击处理程序。网址中的 # 不行。没有它就是金钱。
    • 不要试图弄乱表格。禁用 AJAX 应该可以工作。您可以尝试使用版本 - 比较 jqm alpha2 和 alpha3 使用它(注意:alpha2 有不同的设置)
    • 嗯。我可能会等到再发布几个版本后再使用 jQuery。我禁用了 AJAX,但仍然没有运气。如果没有 url 中的 # ,它可以正常工作。一旦进去就不行了。我假设这是 Web 浏览器中内置的安全功能。 :(
    • 阅读我的编辑。它与禁用无关。我猜你甚至在错误的地方禁用它。简而言之:javascript 只能在您加载的第一页中使用。
    • 酷,我想通了。打算在其中一些页面上尝试做 rel="external" 但对我做不到的页面有点打击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2011-12-22
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多