javascript - 在对象内使用 jquery click 事件

标签 javascript jquery

我想向 <span> 添加点击事件在 DOM 中,但点击事件位于对象中

我有这个html

<html>
<body>
   <span id="meToLog">hello-world </span>
  </body>

 <script>
  function makeObj(){
   this.logMe= $("#meToLog").click(function(){
     console.log("shoot")
    }) 
   }
   const obj = new makeObj()
     obj.logMe // i want this to listen to click event 


   </script>
</html>

最佳答案

正如我在评论中提到的,问题在于您在构造函数的属性 logMe 中存储的内容。 click() 方法返回一个 jquery 对象,在本例中是 span,但单击处理程序从未附加到它。

http://api.jquery.com/click/

您的构造函数中现在的内容是:

function makeObj(){
  this.logMe= $("#meToLog").click(function(){
    console.log("shoot")
  }) 
}

const myObj = new makeObj();
// test what logMe is
console.log(myObj.logMe); // returns the jquery object [span#meToLog]

一种解决方案是将您的 logMe 属性转换为方法,以便将点击处理程序附加到元素:

function makeObj(){
  this.logMe= function(){
    $("#meToLog").click(function(){
      console.log("shoot")
    });
  }
}

// create a new instance
const myObj = new makeObj();
// attach the click handler
myObj.logMe();
// now click on the span and the log should be there

这个示例似乎可以满足您的要求:

https://jsfiddle.net/ndkzjdyb/

<小时/>

我忘了提到,由于函数是 javascript 中的第一类对象,因此您可以将 id 字符串和特定处理程序传递给构造函数方法,以使其更加动态。检查 fiddle 的此版本:

https://jsfiddle.net/ndkzjdyb/2/

<小时/>

编辑

根据@dfsq的评论,我更新了 fiddle ,以避免在该方法多次运行时添加多个事件处理程序:

静态方法

https://jsfiddle.net/ndkzjdyb/3/

动态方法

https://jsfiddle.net/ndkzjdyb/4/

关于javascript - 在对象内使用 jquery click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782786/

相关文章:

javascript - JQuery UI 禁用可排序列表中的重新排序

javascript - 如何使用循环提取数组中的json数据?

javascript - 我应该如何操作具有相同原型(prototype)的另一个对象的 "private"成员?

javascript - JS AudioContext 振荡器 - 同时播放多个音符(复调)

javascript - 作为 div 背景的 Canvas 动画 - EaselJS

javascript - ExtJs 按钮 - 更改点击监听器上的文本和 cls

javascript - 如何缩小 Bootstrap 轮播中的图像

Javascript - 通过引用定义对象属性名称

javascript - 从可变长度字符串中提取 lat、lng

javascript - 如何使用 javascript 发布包含文件类型参数的表单