Вызов метода внутри объекта
Здравствуйте! Столкнулся со следующей проблемой. Есть объект, в котором описаны методы, один из методов (count_checked_elem) формирует массив и присваивает его другому методу-объекту (res_array, массив с данными), а из третьего (submit) эти данные отправляются
control = {
res_array: {},
count_checked_elem: function(name){
var res_array_temp = new Array(), self = this;
var Elements = document.getElementsByName(name), countChecked = 0, coincidence = 0;
for(var i = 0, count = Elements.length; i < Elements.length; i++){
if(Elements[i].checked){
var currentElemVal = Elements[i].value;
res_array_temp.push(currentElemVal);
countChecked++;
}
}
self.res_array = res_array_temp;
alert(self.res_array); //выводит верный, сформированный массив
return countChecked;
},
submit: function(){
var self = this;
alert(self.res_array); //выводит undefined
}
}
После формирования и присваивания выводит массив с данными, а из метода submit выводит undefined, почему-то думаю что дело в контексте вызова this, но не могу сам додуматься в чем ошибка..Спасибо. |
feoalter7,
и что не так?
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body> <input name="test" type="checkbox" value="12345" checked="checked">
<script>
var control = {
res_array: ['hmmm!'],
count_checked_elem: function(name){
var res_array_temp = new Array(), self = this;
var Elements = document.getElementsByName(name), countChecked = 0, coincidence = 0;
for(var i = 0, count = Elements.length; i < count; i++){
if(Elements[i].checked){
var currentElemVal = Elements[i].value;
res_array_temp.push(currentElemVal);
countChecked++;
}
}
self.res_array = res_array_temp;
alert(self.res_array); //выводит верный, сформированный массив
return countChecked;
},
submit: function(){
var self = this;
alert(self.res_array); //выводит тотже массив
}
}
control.submit();
control.count_checked_elem('test');
control.submit();
</script>
</body>
</html>
|
рони, вот так происходит выполнение метода submit
var submitBtn = document.getElementById('submit_control');
submitBtn.addEventListener('click', control.submit, false);
Как Вы написали, да, работает, но вот если навесить обработчик события то undefined Все равно |
feoalter7,
на ваш выбор 2 варианта
var submitBtn = document.getElementById('submit_control');
submitBtn.addEventListener('click', function ()
{
control.submit()
}, false);
var submitBtn = document.getElementById('submit_control');
submitBtn.addEventListener('click', control.submit.bind(control)
, false);
|
рони,
спасибо! работает! Решено. |
| Часовой пояс GMT +3, время: 12:32. |