Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2014, 12:12
Интересующийся
Отправить личное сообщение для feoalter7 Посмотреть профиль Найти все сообщения от feoalter7
 
Регистрация: 28.09.2012
Сообщений: 19

Вызов метода внутри объекта
Здравствуйте! Столкнулся со следующей проблемой. Есть объект, в котором описаны методы, один из методов (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, но не могу сам додуматься в чем ошибка..Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2014, 12:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

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>
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2014, 15:16
Интересующийся
Отправить личное сообщение для feoalter7 Посмотреть профиль Найти все сообщения от feoalter7
 
Регистрация: 28.09.2012
Сообщений: 19

рони, вот так происходит выполнение метода submit

var submitBtn = document.getElementById('submit_control');
submitBtn.addEventListener('click', control.submit, false);


Как Вы написали, да, работает, но вот если навесить обработчик события то undefined Все равно
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2014, 15:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

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);
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2014, 16:23
Интересующийся
Отправить личное сообщение для feoalter7 Посмотреть профиль Найти все сообщения от feoalter7
 
Регистрация: 28.09.2012
Сообщений: 19

рони,
спасибо! работает! Решено.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов метода объекта niko42 Общие вопросы Javascript 4 19.05.2014 21:24
Вызов функции, находящий внутри метода pro_xaoc Библиотеки/Тулкиты/Фреймворки 4 01.03.2014 09:27
вызов ф-ции обработчика как метода объекта FanAizu Общие вопросы Javascript 5 23.08.2013 15:52
Вызов метода объекта. Armen Общие вопросы Javascript 5 05.07.2013 15:54
Вызов метода внутри метода при инициализации плагина SergXP jQuery 0 01.07.2013 22:27