从click事件中调用外部函数并将参数作为数组传递给它

时间:2017-03-20 10:32:59

标签: javascript jquery

$(document).ready(function(){
  var available=["1","2","3","4"];
  var taken=[];
  var solutions=[["1","2"],["3","4"]];      

  // external function
  function check(input){
    for(var i=0;i<solutions.length;i++){
      var result=solutions[i].every(function(elem){
              return input.includes(elem)==true;
       })
      if(result==true){
          return result;
                 }
        }
   }

  // click event
  $("table td").click(function(){
  debugger
    var removed=available.splice(available.indexOf(this.id),1);
    taken.push(removed);
    check(taken); // the call works if the array *taken* is initialize                        
                  //by hand, but doesn't work filling the array with     
                 //the push method as always return an undefined value
  })

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table style="width:100%">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
</table>

我尝试检查一个数组(采用),该数组填充了从表中的点击派生的值,而不是解决方案数组中包含的数组。为此,我使用一个执行该作业的参数进行了函数检查。数组 take 作为参数传递给函数,并通过方法push填充可用值。

范围看起来很好,因为如果我使用满足其中一个解决方案的值初始化采用,则函数 check 的返回为真。 但是将push方法应用于变量 take 返回始终是未定义的,因此似乎全局采用未填充push或类型不同?。

2 个答案:

答案 0 :(得分:1)

我发现 available.splice(available.indexOf(this.id),1)返回的对象不是字符串,所以我需要将它转换为带有toString()的字符串来制作take数组是一个字符串数组,而不是一个对象数组。

答案 1 :(得分:0)

函数调用没有问题,请检查你的外部函数,它应该返回true或false,因为你的代码只能在一个场景中返回。试试这个功能 -

function check(input){
for(var i=0;i<solutions.length;i++){
var result = false;
    result=solutions[i].every(function(elem){
          return input.includes(elem)==true;
   })
      return result;
    }

}