如何确定点击事件中$(this)是否在数组中

时间:2016-05-03 15:46:31

标签: javascript jquery arrays

我在4个数组中有一组id个值。将为每个数组分配一个h1的文本值和一个尚未放入的p。现在我只是想让它在单击数组graphicDesign中的一个图像时发出警报。我尝试使用$ .inArray

DEMO

var graphicDesign = [$('#design'), $('#DD'), $('#SElogo')];
var webDesign = [$('#bootstrap'), $('#farm'), $('#pong'), $('#SE'), $('#dung')];
var programming = [$('#SE'), $('#dung'), $('#sacar')];
var other = [$('#firm')];

function categories() {
  if ($.inArray(this, graphicDesign) > -1) {
    alert('hello');
  }
}

5 个答案:

答案 0 :(得分:6)

您不应将DOM对象存储在数组中,并尝试将它们与$ .inArray匹配。 使用ID或其他属性将是更好的解决方案。

例如:

https://jsfiddle.net/1f9xd3t0/

var graphicDesign = ['design', 'DD', 'SElogo'];

function categories(id) {
  if ($.inArray(id, graphicDesign) > -1) {
    alert('hello');
  }
}  

categories('design');

答案 1 :(得分:1)

您需要将event对象传递给categories()

$('.portPic').click(function(e) {
  // ...
  categories(e);
});

function categories(e) {
  console.log(e.target);
  if ($.inArray(e.target, graphicDesign) > -1) {
    alert('hello');
  }
}

<强>更新

也许在数组中使用id而不是jQuery对象。

var graphicDesign = ['design', 'DD', 'SElogo'];

然后在e.target.id中使用categories()

答案 2 :(得分:0)

您可以使用typeof,这是一个示例。

// Objects
typeof {a:1} === 'object';

// use Array.isArray or Object.prototype.toString.call
// to differentiate regular objects from arrays
typeof [1, 2, 4] === 'object';

答案 3 :(得分:0)

Array.indexOf()是一个执行相同操作的本机函数。

graphicDesign.indexOf(this) > -1将与您所写的相同。

在您的使用中,this将引用全局对象,除非您在其他地方将此函数分配给对象并将其作为方法调用...但是,您将尝试判断是否你调用它的对象是在graphicDesign数组中吗?

以下是触发警报的用法示例:

var graphicDesign = [ {} ]

graphicDesign[0].categories = function() {
  if (graphicDesign.indexOf(this) > -1) {
    alert('the object this method was called on is inside the graphicDesign array')
  }
}

graphicDesign[0].categories()

不清楚你到底想要完成什么,但是(你提到点击检测,但这里没有点击处理程序等等)...我希望这有帮助吗?

答案 4 :(得分:0)

$ .inArray的这个块正在运行,但你把它们放在错误的地方,它总是返回-1,所以你无法得到警报(&#39;你好&#39;)。请修正整体逻辑。

  if ($.inArray(this, graphicDesign) > -1) {
    alert('hello');   }