2016-01-19 97 views
1

代碼:如何在javascript中訪問附加到元素globaly的對象

頂部有幾個全局設置。 On is inputElementRef它是我正在使用的輸入元素的參考

在onload函數中,obj使用函數setPropertys附加到元素。

在setPropertys我做了一個對象,因爲我想在腳本中的任何地方使用這些變量 在這個函數的底部,它啓動addEvent在輸入元素中發送。

在它ADDEVENTS聲明與一個回調giveOptions()

在giveOptions我檢測了var元件,其是在其上對象所連接的輸入字段的onkeyup事件。

問題: 現在爲什麼它在函數giveOptions中存在對象,爲什麼我沒有在代碼底部的函數之外使用acces。

我試圖訪問那些沒有成功的對象中的變量。

它apears,我只有acces對象的函數giveOptions()不在外面或在任何其他功能。

爲什麼是這樣的,我該如何更改代碼,所以我有無處不在的東西,他對象真正的輸入元素?

/* JS控制器*/

// Declare globale variables 
var currentSelectedOption 
var currentValue; 
var arrOptions; 
var inputElementRef = document.getElementById('invoer'); 
var outputElementRef = document.getElementById('uitvoer'); 



// initiate application 
window.onload = function(){ 
// Create span (hidden) for sugest values later in script) 
var spanOutput = document.createElement('span'); 
spanOutput.id="spanOutput"; 
spanOutput.style.visibility="hidden"; 
document.body.appendChild(spanOutput); 

// attack object to element 
document.getElementById('invoer').obj = setPropertys(document.getElementById('invoer'), outputElementRef, 'responder.php', 'Geen resultaten', 1000); 
} 

// create object and add eventhandlers to element 
function setPropertys(inputElement, outputElement, file, noResultMessage, timeout){ 
var props={ 
inputElement : inputElement, 
outputElement : outputElement, 
file : file, 
noResultMessage : noResultMessage, 
timeout : timeout 
}; 
addEvents(inputElement); 
return props; 
} 

// attack events to elements 
var isOpera = (navigator.userAgent.toLowerCase().indexOf("opera") !=-1);  // detect is user agent is opera 
function addEvents(inputElement){ 
this.onkeyup = giveOptions;      // all browsers use onkeyup event 
if(isOpera) { this.onkeypress = giveOptions; } // if useragent is Opera use onkeypress event 
} 

function giveOptions(e){ 

if(window.event){     // All browsers except firefox: window.event is available 
    element = event.srcElement; 
    key = event.keyCode; 
} 
else{        // if firefox use e.target and e.which 
    element = e.target; 
    key = e.which; 
} 


if(key == 13){      // detect enter key 
    console.log("enter"); 
} 

if(key == 38){      // detect key up 
    console.log("pijl omhoog"); 
} 

if(key == 40){      // detect key down 
    console.log("key down");  
} 

// Make string to send to server 
var params = inputElementRef.value; 

    console.log(params); 
    console.log(inputElementRef.obj.file); 
// Send request to server 
//var newdata = net.contentLoader('responder.php', procesData, null, "POST", params); 
} 




//console.log(inputElementRef); 
//console.log(inputElementRef.getAttribute('id')); 
//console.log(document.getElementById('invoer').obj.inputElement); 
//console.log(inputElementRef.obj.outputElement); 
//console.log(inputElementRef.obj.file); 
+0

你能分享小提琴/ html嗎? – Siddharth

回答

0

試試這個:

console.log("input element ref: " + inputElementRef); 

做其餘類似。這會將所有變量作爲字符串輸出到控制檯。

首先要做的事:

閉上你的var currentSelectedOption; < - '; '

+0

tnx,這確實是一個錯誤,我得到了元素console.log(「element =」+ inputElementRef);但是我無法進入obj來訪問我在giveoptions函數中使用的其他值。 –

+0

您的意思是這部分** var params = inputElementRef.value; console.log(params); console.log(inputElementRef.obj.file); **?如果你可以用你的例子創建一個簡單的小提琴,那麼最好是看看你創建的對象。 – c00ki3s