我有一个本地范围数组,我试图传递给click事件处理程序。但是,我无法将数组传递给单击处理程序。
这是我的代码
$("ul.tabs-2 li").click(function (event, myarray) {
console.log('i am called');
var tabclicked = $(this).find("a").attr("href");
if(tabclicked === '#one') {
} else if(tabclicked === '#two') {
}
});
$(document).ready(function () {
var myarray = [
[
"01-Oct",
1064.8,
1089,
1046.05,
1055.35
],
[
"05-Oct",
1065,
1110,
1055,
1106.45
],
[
"06-Oct",
1115,
1145,
1087.95,
1094.4
]
];
$('ul.tabs-2 li:eq(0)').click(event, myarray);
});
这是我的小提琴
http://jsfiddle.net/jq4f69cz/10/
你能告诉我如何解决这个问题吗?
答案 0 :(得分:1)
很快,您可以使用此fiddle。
...
首先,您应该将click事件绑定移动到ready()块中。否则您的事件绑定无法注册到dom。然后,如果你想使用myarray的所有数据,你应该用另一个数组包装它。因为,如果您发送此类myarray数据,则必须在事件中处理以下数据;
$("ul.tabs-2 li").on('click', function(event, arr1, arr2, arr3) { ... }
修改强>
我在fiddle更新了我的答案。我不知道你想在#one,#两个条件下做什么。所以我在条件下只按了控制台日志。
答案 1 :(得分:0)
根据文档,您必须在处理程序之前发送 eventData ,如:
if
并且您应该将所有事件绑定放在doc ready块中,以确保DOM已准备就绪,并且能够为特定的事件注册事件。
$("ul.tabs-2 li").click(myarray, function (event) {
$(document).ready(function() {
$("ul.tabs-2 li").click(myarray, function(event) {
console.log('i am called');
var tabclicked = $(this).find("a").attr("href");
if (tabclicked === '#one') {
$('pre').html(myarray[$(this).index()].join(' '))
} else if (tabclicked === '#two') {
$('pre').html(myarray[$(this).index()].join(' '))
}
});
var myarray = [
["01-Oct", 1064.8, 1089, 1046.05, 1055.35],
["05-Oct", 1065, 1110, 1055, 1106.45],
["06-Oct", 1115, 1145, 1087.95, 1094.4]
];
});
答案 2 :(得分:0)
更通用的解决方案是使用名为
的魔术APIbind(context)
首先在所需的上下文级别创建一个普通函数。
listClickListener = function(evt) {
console.log('i am called');
var caller = $(evt.target);
var tabclicked = $(caller).attr("href");
if (tabclicked === '#one')
{
console.log("one clicked");
}
else if (tabclicked === '#two')
{
console.log("two clicked");
}
else {
console.log(caller);
console.log(evt);
}
};
listClickListener.bind(this);
然后将其附加到任何
$("ul.tabs-2 li").on('click', listClickListener);