我在尝试使用 jQuery 重定向到新 URL 时遇到问题,但不知何故它在这种特定情况下不起作用。我将 jQuery 与 html 和 Django backlog 结合使用,但我认为这些都不会导致显示未定义的参数。代码相当简单:
$(document).on('click', '.view-diagnostics', function(){ let url = $(this).data("href"); window.location.pathname = url; })
点击的html元素如下:
<td> <div class="view-diagnostics"> <button class="button h-btn view-diagnostics" data-href="{% url "internet:diagnose" %}">{% trans "View diagnostics"%} </button> </div> </td>
在这种情况下,我可以使用 console.log(url)
记录 URL 并获取 "/something/something/"
形式的字符串,我可以使用浏览器中的检查工具使用断点来查看该 URL 确实包含正确的 URL,并且我可以获得 URL 的类型,它是一个字符串。然而,当我单击执行此代码的按钮时,该站点会重定向到 http://127.0.0.1:8000/undefined
(我使用的是本地服务器),因此不知何故 URL 现在未定义。
我已经尝试了很多不同的方法来执行此操作,包括尝试重定向到新网址的每种方法,包括 window.location = url
、window.location.href = url
,但总是弹出未定义。我也已经尝试打印 URL 的内容和类型,这一切看起来都很好。对我来说最奇怪的部分是,如果我将代码更改为
$(document).on('click', '.view-diagnostics', function(){ let url = $(this).data("href"); url = "/something/something/" window.location.pathname = url; })
即使我从第一个 let URL 行的 console.log() 结果中复制并粘贴 URL,代码也会正确重定向到正确的 URL。
总结一下问题:有一个按钮,其中包含 data-href
包中的 URL。单击按钮时,我会在 jQuery 中获取 URL,并将其保存为 URL。我现在可以使用 console.log()
记录 URL 并获取类型,然后我得到 URL 和我期望的类型(字符串)。当我尝试重定向到此 URL 时,出现错误,无法重定向到 URL http://127.0.0.1:8000/undefined
。当我将 URL 硬编码为从早期日志记录测试中复制粘贴的字符串时,重定向突然起作用了。
有谁知道我还能尝试什么来解决这个问题?
您的选择器
.view-diagnostics
匹配两个 元素。按钮
和div
。为按钮调用您的函数并将您期望的值分配给
window.location.pathname
。然后事件冒泡到
div
并第二次调用该函数。div
没有任何data-*
属性,因此url
是未定义
。它被分配给window.location.pathname
并覆盖之前的分配。