Вызов метода внутри объекта
Здравствуйте! Столкнулся со следующей проблемой. Есть объект, в котором описаны методы, один из методов (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, время: 00:10. |