jquery mobile event.preventdefault()不起作用

Posted

技术标签:

【中文标题】jquery mobile event.preventdefault()不起作用【英文标题】:jquery mobile event.preventdefault() not working 【发布时间】:2016-01-16 06:35:56 【问题描述】:

奇怪的问题,显然在 jquery mobile 中并不少见。我有一个包含两项的列表视图弹出窗口,旨在允许用户通过<a href="someurl.com"> 切换视图。每个选项都旨在在同一页面上显示 json 数据。我不希望href 将查看者带到另一个页面,所以我尝试使用event.preventdefault()

但经过大量研究,我仍然无法阻止 href 跳转到 google.com,即使(我认为)我正确使用了 event.preventdefault();

这是相关的html

<div data-role='popup' id='popupSwitchView' data-theme='none'>
    <ul data-role='listview'>
        <legend>Choose a view</legend>
        <li><a href='javascript:;' data-role='button' data-transition='fade' data-mini='true' class='ui-btn-active switchview' id='ABC' name='theView' value='ABC'>ABC</a>
        </li>
        <li><a href='http://google.com' data-role='button' data-transition='fade' data-mini='true' class='switchview' id='DEF' name='theView' value='DEF'>DEF</a>
        </li>
    </ul>
</div>

...这里是jquery:

$('#DEF').on('click', function () 
    event.preventDefault();

我想知道这是否是我使用选择器的方式,但我用相同的代码here 测试了选择器,看来我的选择器没问题。

Chrome 控制台未显示任何错误。对我在这里缺少的东西有什么想法吗?

编辑

我忽略了上面的 html 和 jquery 是 php 变量$html_jq 的一部分,它是从另一个 php 文件中回显的。

file1.php$html_jq 相呼应,file2.php 中定义。

【问题讨论】:

你需要把 --event -- 放在括号内,这样它就会被拾取 -- $('#DEF').on('click', function (event) -- 也可以试试-- event.stopImmediatePropagation() -- 它阻止其余的处理程序被执行并防止事件在 DOM 树中冒泡。 @Tasos 谢谢,是的,试过了——也试过 $('#DEF').on('click', function (e) e.event.preventDefault();...都没有工作。不幸的是 event.stopImmediatePropagation() 也没有。 是的,它们并不总是有效。您可以做的是设置一个标志,例如 onclick 您将一个变量设置为 on 状态。然后将超时设置为一秒左右以将开启状态清除为关闭。现在在您的其他点击功能中检查 - 如果状态处于打开状态,则不要运行代码。这是一种解决方法,效果很好 再次感谢。我的编辑可能会对此有所了解(即 html 和 jq 位于正在回显的 php 变量中)。我昨天不认为它是相关的,但我开始怀疑它是 我总是这样使用:$('#DEF').on('click', function(event) event = event || window.event; event.preventDefault(); ); 【参考方案1】:

截至目前,当您尝试将 JQM 1.4.5 与 Jquery 2.1.4 之后的任何内容一起使用时,就会出现此问题

见Jquery mobile github

【讨论】:

【参考方案2】:

我认为答案的一部分(可能是 0.01%)。选择器没有抓取任何东西,这解释了不合作的行为。我认为这意味着 jquery mobile 和 jquery 本身正在幕后处理这个事件,他们指的是别的东西,显然不是我的选择器。

正如this stack question 中所建议的那样,我深入研究了当您单击该链接时实际发生的情况,这很奇怪。

即,在 Chrome 开发者工具Source 选项卡中选中“点击” -> Event Listener Breakpoints -> Mouse -> Click 然后点击 f11 直到它停止跳来跳去,我发现似乎成为一个不可避免的While 循环,其中事件被挂断。该 While 循环似乎位于第 4541 行的 jquery-2.1.1.js 中。

这是一些有趣的幕后东西,在某些时候会证明非常有价值,但我不确定在这里做什么。有什么建议吗?

【讨论】:

以上是关于jquery mobile event.preventdefault()不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Mobile仿360首页,jQuery Mobile网格布局,jQuery Mobile网址大全,HTML5仿360首页

jQuery Mobile-jquery Mobile 怎么用ajax提交表单

jquery mobile,结合jquery mobile“页面”和内部页面

JQuery Mobile 1.3.1“$.mobile.loading”不工作

如何使用 jquery 或 jquery mobile mobile 根据日期列出数据

jQuery Mobile-jquery Mobile 怎么用ajax提交表单