2017-03-20 1 views
0

클릭 이벤트 내에서 외부 함수를 호출 어레이로서 그것의 인수를 전달

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

I는 어레이에 대해 표 클릭으로부터 유도 된 값으로 충전 배열 ( 촬영) 확인하려고 솔루션 배열에 포함되어 있습니다. 이를 위해 해당 작업을 수행하는 하나의 매개 변수로 함수 검사를 수행했습니다. 배열 을 사용하여을 인수로 전달하고 메서드 푸시를 통해 사용 가능한 값으로 채 웁니다.

스코프 내가 기능 수표의 반환 솔루션 중 하나를 충족 값으로 촬영 를 초기화하는 경우이 참 잘 때문에 것을 보인다. 변수 에 푸시 메서드를 적용한 경우 반환 값은 항상 정의되어 있지 않으므로 이 찍힌은 푸시로 채워지지 않았거나 유형이 서로 다른 것 같습니다.

+0

지금까지 시도한 코드와 문제를 복제 한 데모를 만드십시오. – Manish

+0

'availableIds'는 어디에서 왔습니까? 'available'라고 불리는'var'을 선언하고 있지만'availableIds'는 선언하지 않았습니다. – DavidDomain

+0

[jsfiddle] (https://jsfiddle.net/cortazar11/zjh3q6hz/). 두 명의 플레이어를 클릭하고 X를 클릭하십시오. – user1881983

답변

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; 
    } 

}

1

내가 available.splice (available.indexOf (this.id)는, 1) 객체가 아닌 문자열을 반환 것을 발견, 그래서 변환해야합니다 -이 기능으로 시도 toString()을 사용하여 문자열을 가져 와서 가져온 배열을 객체 배열이 아닌 문자열 배열로 만듭니다.

관련 문제