2015-11-06 55 views
0

我有一个本地范围数组,我试图传递给一个单击事件处理程序。但是,我无法将数组传递给点击处理程序。如何将本地作用域数组传递给事件处理程序?

这是我的代码

$("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/

你能告诉我怎么解决这个问题?

回答

1

在短期内,你可以使用这个fiddle

...

首先,你应该将你的点击事件绑定到就绪()块。否则你的事件绑定不能注册为dom。然后,如果你想使用myarray的所有数据,你应该用另一个数组包装它。因为,如果你发送这样的myarray数据,你必须处理你的事件中的数据触发以下;

$("ul.tabs-2 li").on('click', function(event, arr1, arr2, arr3) { ... } 

编辑:

我更新了我的答案对这个fiddle。我不知道你想在#一,#两种情况下做什么。所以我只是在条件下按下了控制台日志。

+0

谢谢,但为什么这是数据是unavialable其他如果(tabclicked ==='#two')条件? – Pawan

+0

@PreethiJain你想学会传递数据。我写了这个解决方案。如果你写的是你想要的,我会尽力帮助你。如果我点击数据或图表链接,会发生什么? –

0

按文档,你以前处理喜欢送EVENTDATA

$("ul.tabs-2 li").click(myarray, function (event) { 

,你应该把在文档准备好块,确保DOM已准备就绪,将在所有事件绑定能够为特定的事件注册事件。

$(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] 
 
    ]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<pre></pre> 
 

 
<div id="divforhistoricresults" class="classhistoricaldataresults"> 
 
    <div class="list-container-2"> 
 
     <ul class="tabs-2 clearfix"> 
 
      <li class='default'><a href="#one">Data</a> 
 
      </li> 
 
      <li><a href="#two">Chart</a> 
 
      </li> 
 
     </ul> 
 
    </div> 
 
    <div class="tab-container-2"> 
 
     <table id="one" class="tab-content-1 table table-striped"></table> 
 
     <table id="two" class="tab-content-1 table table-striped"></table> 
 
    </div> 
 
</div>

+0

但myArray的是得到了全球范围内知道? – Pawan

+0

@PreethiJain是的,这是全球性的,所以不适合你。而你的评论并没有帮助理解这个问题。善意地解释更好。 – Jai

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/

相关问题