2016-10-11 3 views
0

textareas의 값을 개체의 속성과 일치시켜야합니다. 텍스트 영역의 인덱스는 사람의 ID와 동일한 경우는전역 변수를 사용하지 않고 다른 함수에서 로컬 변수에 액세스

  1. 사용되는 textarea의 값이 객체
  2. 에 포함 된 사람의 이름과 같다 : 경우에만 일치해야합니다. (내 바이올린에 Cf를 부울 : https://jsfiddle.net/Lau1989/hxcpstty/1/)이 하나의 내부

    function make_test(name, job, ID) { 
        var test = {}; //local variable to be used in 'function suggest(index)' 
        test.name = name; 
        test.job = job; 
        test.ID = ID; 
        return test; 
    } 
    new make_test("Paul", "manager", 1); 
    new make_test("John", "employee", 2); 
    new make_test("Jan", "employee", 2); 
    

    :

내가이 함수에서 객체 test = {}에 액세스하기 위해 필요한이 작업을 수행하려면

function suggest(index) { 
    if (test.ID === index && test.name == thisInput.value) { 
     thisOutput.innerHTML = "Has job : " + test.job; //should access 'test' properties : test.name, test.job, test.ID 
    } 
} 

문제입니다 test = {};을 전역 변수로 선언하면 function suggest(index)은 내가 선언 한 마지막 것이므로 'Jan'을 찾을 수 있습니다. 그러나 var test = {};을 로컬 변수로 선언하면 function suggest(index)은 외부에서 var test = {};에 액세스 할 수 없으므로 전혀 작동하지 않습니다.

여기가 내가 붙어 있습니다. 내 목표는 nameID에 따라 suggest() 번 안에 var test = {};에 액세스하여 모든 사람의 직업을 얻는 것입니다. 당신의 도움에 대한

덕분에

+1

모든 사람에 대한 참조를 보유하려면 배열이 필요합니다. 직원 ID가 고유 한 경우 (예에서는 *가 아닌 *) * 배열 대신 개체를 사용할 수 있습니다. 또한 함수를 호출 할 때'new'가 필요하지 않습니다. 그래서 :'var employees = []; employees.push (make_test (...));'. – nnnnnn

+1

@Jecoms OP가 '제안'기능에 대해 다른 질문을하는 것이 좋습니다. http://stackoverflow.com/questions/39968429/dynamically-access-function-object-property#comment67216922_39968451 – guest271314

+0

@nnnnnn : 그게 내가 시도한 것입니다. 처음에는 배열에 객체를 밀어 넣지 않으면 객체 (ID 및 ID)와 일치해야하는 다른 두 속성이 없습니다. 처음에는 배열을 반복 할 때 객체의 배열을 사용하는 것을 피하기를 원했습니다. 객체를 더하면 같은 결과가 여러 번 인쇄됩니다.내가 자바 스크립트에서 내 지식을 확장하려고 여전히 노력하고 있기 때문에 나는 틀릴 수도있다. – Lau

답변

2

, 당신이 배열에있는 모든 사람들을 저장 좋을 것 배열을 반복하는 Array.prototype.forEach()를 사용 suggest에 배열을 전달 당신의 suggest() 기능 당신이 일치를 확인하기 위해 배열을 통해 검색 할 수 있습니다 (그것을 밖으로 시도 실행 코드 클릭) :

function make_test(name, job, ID) { 
 
    var test = {}; 
 
    test.name = name; 
 
    test.job = job; 
 
    test.ID = ID; 
 
    return test; 
 
} 
 

 
var people = []; 
 

 
people.push(make_test("Paul", "manager", 1)); 
 
people.push(make_test("John", "employee", 2)); 
 
people.push(make_test("Jan", "employee", 2)); 
 

 
function suggest(index) { 
 
    var thisInput = document.getElementById("textarea" + index); 
 
    var thisOutput = document.getElementById("output" + index); 
 

 
    thisOutput.innerHTML = "Has job:"; 
 

 
    for (var i = 0; i < people.length; i++) { 
 
    if (people[i].ID === index && people[i].name == thisInput.value) { 
 
     thisOutput.innerHTML = "Has job: " + people[i].job; //should access 'test' properties : test.name, test.job, test.ID 
 
     break; 
 
    } 
 
    } 
 
}
<table> 
 
    <tr> 
 
    <td><textarea onkeyup="suggest(1)" name="response" id="textarea1" cols="30" rows="5"></textarea></td> 
 
    <td><div id="output1">Has job :</div></td> 
 
    </tr> 
 
    <tr> 
 
    <td><textarea onkeyup="suggest(2)" name="response" id="textarea2" cols="30" rows="5"></textarea></td> 
 
    <td><div id="output2">Has job :</div></td> 
 
    </tr> 
 
</table>
당신이 수동 기능을 내부에 새로운 객체를 생성하기 때문에, newmake_test() 함수를 호출 이해가되지 않습니다

참고.

+0

감사합니다. 당신의 솔루션은 완벽합니다! 나는 또한 추가적인 문제를 디버깅하는 데 도움이 될 새로운 트릭을 배웠다. – Lau

+0

당신을 진심으로 환영합니다. 이 방법을 좀 더 세련되게 만들 수있는 방법이 있지만, 기존 코드를 수정하고 실행하는 데 필요한 기본 코드 만 수정하면됩니다. – nnnnnn

1

당신이 배열에 make_test에 의해 반환 된 객체를 저장할 수 @nnnnnn에 의해 제안; 다음, 당신의 직원 ID가 고유하지 않는 것 점을 감안

window.onload = function() { 
 

 
    function make_test(name, job, ID) { 
 
    var test = {}; //local variable to be used in 'function suggest(index)' 
 
    test.name = name; 
 
    test.job = job; 
 
    test.ID = ID; 
 
    return test; 
 
    } 
 

 
    var thisInput = document.querySelector("input"); 
 

 
    var thisOutput = document.querySelector("output"); 
 

 
    var arr = []; 
 

 
    arr.push(make_test("Paul", "manager", 1), 
 
    new make_test("John", "employee", 2), 
 
    new make_test("Jan", "employee", 2)); 
 

 
    function suggest(index, arr) { 
 
    arr.forEach(function(test) { 
 
     if (test.ID === index && test.name == thisInput.value) { 
 
     thisOutput.innerHTML = "Has job : " + test.job; 
 
     } 
 
    }) 
 
    } 
 

 
    suggest(1, arr); 
 

 
}
<input type="text" value="Paul"> 
 
<output></output>

관련 문제