2017-09-20 7 views
-2

テーブルの「詳細」のチェックを実行する機能​​をどのように呼び出すことができますか?​​のif-elseステートメントは、「details」が「M」の場合は要素の背景色を「青」に戻し、そうでない場合は「F」の場合はピンクを返します。表示されているコードのように関数を呼び出そうとすると、機能しません。Javascript条件文の呼び出し

JavaScriptのコード:

//table  
var table = [ 
"Lyn", "22", "F", 1, 1, 
"May", "32", "F", 18, 1, 
"Sam", "27", "F", 1, 2, 
"Sham", "23", "F", 2, 2, 
"Hrs", "22", "M", 13, 2 
]; 

// function calling starts here.. 

      for (var i = 0; i < table.length; i += 5) { 

       var element = document.createElement('div'); 
       element.className = 'element'; 

       var number = document.createElement('div'); 
       number.className = 'number'; 
       number.textContent = (i/5) + 1; 
       element.appendChild(number); 

       var symbol = document.createElement('div'); 
       symbol.className = 'symbol'; 
       symbol.textContent = table[ i ]; 
       element.appendChild(symbol); 

       var details = document.createElement('div'); 
       details.className = 'details'; 
       details.innerHTML = table[ i + 1 ] + '<br>' + table[ i + 2 ]; 
       element.appendChild(details); 
       element.CheckColour(details); /*help me check this */ 

       /*CheckColour function, help me check this too if there is any error*/ 
       function CheckColour() 
       { 
        var element, number, symbol, details; 

        if(details == "M") 
        element.style.backgroundColor = 'rgba(0,191,255,0)'; 
        else 
        element.style.backgroundColor = 'rgba(255,105,180,0)'; 
       } 
+1

あなたはすべての変数を関数内で再定義していますので、それらの値は「未定義」です。これは明らかに!= ''M''です。その上に* "それdoesnt't作品" *は非常に良い問題の説明ではありません。 –

+0

関数に何も渡されていません... – treeseal7

答えて

1

あなたの機能はelementための方法ではありませんので、あなたはelementにそれを呼び出すべきではありません。代わりにelementを関数に渡します。

また、detailsはDOM要素なので、"M"にはなりません。おそらくtable[i+2]"M"を比較したいと思うかもしれません。

あなたはこのようにそれを行うことができます:ifの両方のブロックが同じプロパティに割り当てを行うため

CheckColour(element, table[i+2]); 

function CheckColour(element, details) { 
    element.style.backgroundColor = 
     details == "M" ? 'rgba(0,191,255,0)' : 'rgba(255,105,180,0)'; 
} 

これは、if ... elseの文の代替としてternary operator (? ... :)を使用しています。

functionの定義をループから外してください。それは一度定義する必要があります。

+0

hm、細部によってはまだ色が変わりません。多分それは何とかCSSに関係しています。 Btw、貴重な提案に感謝します。 – ace21

+0

あなたがしたいことはわかりませんが、あなたのコードの 'details'はDOM要素です。明らかに文字列 '' M ''と等しくなることはありません。 'details 'の代わりに' table [i + 2] 'をチェックしたいのでしょうか?それから関数に渡します: 'CheckColour(element、table [i + 2])'。 – trincot

+0

私は昨日それをやったが、条件部で小修正をして動作する。助けてくれてありがとう。 – ace21

0

機能を抽出し、適切な変数を設定してアクションを実行することはどうでしょうか。

function CheckColour(element, details) { 
    if(details == "M") 
    element.style.backgroundColor = 'rgba(0,191,255,0)'; 
    else 
    element.style.backgroundColor = 'rgba(255,105,180,0)'; 
    } 

//table  
var table = [ 
"Lyn", "22", "F", 1, 1, 
"May", "32", "F", 18, 1, 
"Sam", "27", "F", 1, 2, 
"Sham", "23", "F", 2, 2, 
"Hrs", "22", "M", 13, 2 
]; 

// function calling starts here.. 

      for (var i = 0; i < table.length; i += 5) { 

       var element = document.createElement('div'); 
       element.className = 'element'; 

       var number = document.createElement('div'); 
       number.className = 'number'; 
       number.textContent = (i/5) + 1; 
       element.appendChild(number); 

       var symbol = document.createElement('div'); 
       symbol.className = 'symbol'; 
       symbol.textContent = table[ i ]; 
       element.appendChild(symbol); 

       var details = document.createElement('div'); 
       details.className = 'details'; 
       details.innerHTML = table[ i + 1 ] + '<br>' + table[ i + 2 ]; 
       element.appendChild(details); 

       // element.CheckColour(details); /*help me check this */ 
       CheckColour(element, details); 
       /*CheckColour function, help me check this too if there is any error*/ 


       var object = new THREE.CSS3DObject(element); 
       object.position.x = Math.random() * 4000 - 2000; 
       object.position.y = Math.random() * 4000 - 2000; 
       object.position.z = Math.random() * 4000 - 2000; 
       scene.add(object); 

       objects.push(object); 

       // 

       var object = new THREE.Object3D(); 
       object.position.x = (table[ i + 3 ] * 140) - 1330; 
       object.position.y = - (table[ i + 4 ] * 180) + 990; 

       targets.table.push(object); 

      } 
関連する問題