我在4个数组中有一组id
个值。将为每个数组分配一个h1的文本值和一个尚未放入的p。现在我只是想让它在单击数组graphicDesign中的一个图像时发出警报。我尝试使用$ .inArray
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');
}
}
答案 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'); }