如何将本地范围数组传递给事件处理程序?

时间:2015-11-06 07:32:46

标签: jquery

我有一个本地范围数组,我试图传递给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/

你能告诉我如何解决这个问题吗?

3 个答案:

答案 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)

更通用的解决方案是使用名为

的魔术API
bind(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);

小提琴: https://jsfiddle.net/jq4f69cz/10/