如何在javascript

时间:2016-01-19 09:43:39

标签: javascript object

代码:

在顶部有一些全局设置。 On是inputElementRef,它是我正在使用的输入元素的引用

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

在setPropertys中我创建一个对象,因为我想在脚本中的任何地方使用这些变量 在这个函数的底部,它启动了在输入元素中发送的addEvent。

在addEvents中,它使用回调giveOptions()

声明了一个onkeyup事件

在giveOptions中,我检测到var元素,它是附加对象的输入字段。

问题: 现在为什么我在函数giveOptions中访问了对象,为什么我没有像在代码底部那样访问函数外部。

我试图在对象中访问那些没有成功的变量。

它表示我只能访问函数giveOptions()中的对象,而不是在外部或任何其他函数中。

为什么会这样,以及如何更改代码以便我可以在任何地方访问对象真实的输入元素?

/ * js controller * /

// 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);

1 个答案:

答案 0 :(得分:0)

试试这个:

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

其余的做类似的事情。这会将所有变量作为字符串输出到控制台。

先做这件事:

关闭var currentSelectedOption;< - '; “