Javascript 如何在jquery处理程序中找到单击的元素?

Javascript 如何在jquery处理程序中找到单击的元素?,javascript,jquery,html,javascript-events,Javascript,Jquery,Html,Javascript Events,如果jquery中的on click方法中传递了一个参数,我将尝试对clicked元素执行一个特定的操作。当我尝试访问它时,它引用的是整个窗口,而不是单击的元素。如何访问处理程序中单击的元素 以下是我使用的代码: var myfunction = function(action) { var content; var $this = $(this); if(action === "one") { $(".output").text("clicked on one"); $this

如果jquery中的on click方法中传递了一个参数,我将尝试对clicked元素执行一个特定的操作。当我尝试访问它时,它引用的是整个窗口,而不是单击的元素。如何访问处理程序中单击的元素

以下是我使用的代码:

var myfunction = function(action) {
  var content;
  var $this = $(this);
if(action === "one") {
  $(".output").text("clicked on one");
  $this.addClass("one");
 } 
if(action === "two") {
 $(".output").text("clicked on two");
 $this.addClass("two");
  }
};
$("#button").on("click", function(event) {
 myfunction("one");
});

$("#button2").on("click", function(event) {
  myfunction("two");
});
我在jsbin上建立了一个示例。任何帮助都将不胜感激。

您可以使用:

或者将操作作为属性存储在元素上,直接绑定处理程序并查询属性

var myfunction = function() {
    var content;
    var $this = $(this);
    var action = $this.attr('data-action');
    if (action === "one") {
        $(".output").text("clicked on one");
        $this.addClass("one");
    } else if (action === "two") {
        $(".output").text("clicked on two");
        $this.addClass("two");
    }
};
$("#button2").on("click", myfunction);

这是指函数所属的对象,在您的情况下,函数属于窗口对象或全局对象,“this”关键字的行为因您使用函数的方式而异,如果您将其用作构造函数,例如,使用新关键字“this”将绑定到正在构造的新对象,当函数用作事件处理程序时,它将被设置为事件元素,该元素是从中触发事件的元素。 有关更多信息,请参阅

您需要更改代码并执行以下操作:

$(".button").on("click",function(){
   var $this = $(this) //refers to the event it was fired from (button object)
$(".output").text("You clicked on "+$this.text());      
});
我使用类而不是ID来定位任何单击的按钮


JSFIDLE中的一个示例:

有几种方法可以做到这一点

JQUERY方式:

在jquery click事件处理程序中,您拥有事件对象。它有一个名为target的属性,这就是您要查找的

更改此:$this.addClassone

对此:$event.target.addClassone

您也可以这样做:event.target.className=one

两个人也一样显然

普通方式:

您只需传入一个表示单击元素的额外参数

var myfunction = function(action, element) {
  var content;
if(action === "one") {
  $(".output").text("clicked on one");
  $(element).addClass("one");
  // or event.target.className = "one"
 } 
if(action === "two") {
 $(".output").text("clicked on two");
 $(element).addClass("two");
 // or event.target.className = "two"
  }
};
$("#button").on("click", function(event) {
 myfunction("one", this);
});

$("#button2").on("click", function(event) {
  myfunction("two", this);
});

@迈克:很高兴听你这么说……让我打个勾,波洛拉:-
var myfunction = function(action, element) {
  var content;
if(action === "one") {
  $(".output").text("clicked on one");
  $(element).addClass("one");
  // or event.target.className = "one"
 } 
if(action === "two") {
 $(".output").text("clicked on two");
 $(element).addClass("two");
 // or event.target.className = "two"
  }
};
$("#button").on("click", function(event) {
 myfunction("one", this);
});

$("#button2").on("click", function(event) {
  myfunction("two", this);
});