2016-10-11 23 views
0

textareasの値をオブジェクトのプロパティに一致させる必要があります。 TEXTAREAのインデックスは、人のIDと等しい場合は使用されてtextareaの値がオブジェクト グローバル変数を使用せずに別の関数でローカル変数にアクセスする

  • に含まれる人の名前と同じである

    1. :場合にのみ一致する必要があります。 (私のバイオリンでCfを ブール:https://jsfiddle.net/Lau1989/hxcpstty/1/):この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)に必要な他の2つのプロパティはありません。私は当初、オブジェクトの配列の反復処理にオブジェクトを使用することを避けたかったのですが、オブジェクトに複数の同じ結果が印刷されることになります。私はまだjavascriptで私の知識を広げようとしているので、私は間違っているかもしれません – 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>

    手動で関数内で新しいオブジェクトを作成しますので、それは、newであなたのmake_test()関数を呼び出すしても意味がないことに注意してください。

    +0

    ありがとう、あなたのソリューションは完璧です!さらに問題をデバッグするのに役立つ新しいトリックを学びました。 – Lau

    +0

    ようこそ。これをもっと細かくする方法はありますが、私は、既存のコードを変更して起動させるだけの基本的な実装に固執すると思いました。 – nnnnnn

    1

    ため

    おかげ@nnnnnnによって示唆されるように、あなたは配列にmake_testによって返されたオブジェクトを格納することができます。あなたの従業員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>

    関連する問題