url中的哈希#时jquery移动表单提交不起作用

Posted

技术标签:

【中文标题】url中的哈希#时jquery移动表单提交不起作用【英文标题】:jquery mobile form submit not working when hash # in url 【发布时间】:2011-08-18 00:10:40 【问题描述】:

我正在使用 jquery mobile 1.0 alpha 4.1 来构建登录表单。

当我第一次加载登录表单时,它提交得很好: http://m.myapp.local/

表单动作如下:

<form action="http://m.myapp.local/default/login" method="post">            

这在第一次登录尝试时工作正常,但是当登录失败时,我们返回以下 URL(这是 jquery mobile 这样做的): http://m.myapp.local/#default/login

现在,当我尝试再次登录/再次提交表单时,没有任何反应,我可以调试以查找错误。它说:

javascript console: Uncaught TypeError: Cannot call method '_trigger' of undefined

当我进一步调试时,我看到 jquery mobile 正在尝试提交到以下 url: http://m.myapp.local/default/logindefault/login 代替 http://m.myapp.local/default/login

当然,导致错误的 url 不存在。问题是,如何防止 jq mobile 出现这种行为?

完整格式:

<div data-role="content" data-theme="c">
<form action="http://m.myapp.local/default/login" method="post">            
    
<div data-role="fieldcontain" class="center">
<input placeholder="Shop Name" id="login_sitename" type="text" value="" name="sitename" />
<input placeholder="Email" id="login_username" type="text" value="" name="username" />                      
<input placeholder="Password" id="login_password" type="password" name="password" />
</div>
                            
<button type="submit" data-theme="b">Log in</button>
</form>
</div>

我注意到的一件奇怪的事情是,当我从 url 中删除 hash 标记并再次提交表单时,一切正常,因此肯定与此有关。

但是,当我删除哈希标签时,它也停止使用过渡,后退按钮也消失了,jquery 移动“加载”对话框也消失了......


似乎这是一个 jquery 错误。使用 alpha 2 时,它可以工作...

<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"></script>

【问题讨论】:

您能否发布更多代码,以便我们看看您要完成的工作? 这个是单页/多页,ajax/changePage()/普通表单提交,如何从一个页面过渡到另一个页面等等... 这可能会有所帮助:codeasp.net/blogs/teisenhauer/microsoft-net/1049/… 或这个:devgrow.com/jquery-mobile-php-mvc-framework 嗨,菲尔,我已经用完整的表单代码更新了上面的代码。我在jquery mobile中使用了标准的表单提交方式,所以我猜这是正常的表单提交?还是 ajax/changepage? codeasp.net 示例似乎在 url 中使用了另一种哈希,也许这与它有关? /#./user/login 【参考方案1】:

您可以尝试禁用 AJAX 以进行表单发布。我在我的网站上遇到了同样的问题:

http://jquerymobile.com/demos/1.0a4.1/#docs/api/globalconfig.html http://jquerymobile.com/demos/1.0a4.1/#docs/forms/forms-sample.html

你可以在提交链接中试试这个: data-ajax="假"

【讨论】:

【参考方案2】:

尝试使用“%23”(不带引号)代替# 符号。因此,如果 URL 显示为

http://jquerymobile.com/demos/1.0a4.1/#docs/forms/forms-sample.html

替换为

http://jquerymobile.com/demos/1.0a4.1/%23docs/forms/forms-sample.html

希望这会有所帮助!

【讨论】:

以上是关于url中的哈希#时jquery移动表单提交不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 时提交表单不起作用

当javascript在元素上调用提交时,jQuery覆盖表单提交不起作用

在代码中提交 mvc 表单时,jQuery on('submit'...) 方法不起作用

使用 Jquery 验证插件提交 Ajax 表单不起作用

使用 jQuery AJAX 向所需的 PHP POST 请求处理程序提交表单不起作用

使用 django ajax jquery 提交一个文件不起作用的表单