javascript - 为什么这个 anchor 说 "search is not a function"?

标签 javascript html dom-events

我编写了一个名为 search 的函数,我希望它在单击链接时被调用,如下面的代码片段所示:

<script>
  function search() {
    console.log('Searching');
  }
</script>
<a href="#" onclick="search();">Click here</a>

但是,代码并没有像我预期的那样工作,这会在单击链接时导致此错误(在 Chrome 中):

Uncaught TypeError: search is not a function

我尝试记录 search 以查看抛出错误的原因:

<a href="#" onclick="console.log(search)">Click here</a>

<script>
  function search() {
    console.log('Searching');
  }
</script>
<a href="#" onclick="console.log(search);">Click here</a>

这一次,每次单击链接时,控制台都会记录一个空字符串。令我困惑的是 search 实际上在其他地方定义为空字符串,使我的函数定义无用。

所以我想知道当点击事件被触发时会发生什么,这里的search是什么时候定义的?

最佳答案

原来 search 实际上是指 a 元素的 search 属性,它是一个控制搜索参数的属性,恰好在这种情况下是一个空字符串。这是因为对于 HTMLAnchorElement,它是特殊的,因为它用于创建超链接和导航到其他地址,因此 search 属性用于控制搜索参数超链接(类似于 Location )对象。设置 anchor 元素的 search 属性将依次设置全局 Location 实例的 window.location.search。这会造成命名冲突,并且由于空字符串不是函数,因此会引发错误。

为函数使用不同的名称以消除此冲突。请注意,如果您不使用 a,您会发现它工作得很好:

<script>
  function search() { 
    alert("foo"); 
  }
</script>
<div onclick="search();">Click me!</div>

关于javascript - 为什么这个 anchor 说 "search is not a function"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882788/

相关文章:

javascript - Firefox element.event 有效,但 element.addEventlistener 无效

javascript - 无法使用 document.cookie 在 UIWebview 浏览器中读取 cookie

javascript - 如何查看 jQuery 修改后的 HTML Dom?

javascript - 如何在 Ajax 中传递动态 html 行的数据?

javascript - 为什么不显示 SVG 路径?

javascript - 如何在IE中为动态创建的div设置onmousedown事件?

javascript - 如何在 JavaScript 中实现堆栈和队列?

javascript - 从在javascript中创建的id触发jquery事件

c# - 将 div 元素发送到电子邮件时丢失样式 (C# asp.net)

javascript - 使功能同步工作(等待本地事件被触发)