2012-03-07 4 views
1

У меня есть функция, которая возвращает объект. в объекте у меня есть две функции, чтобы показать всплывающее окно и закрыть его. он работает в родительской функции, но это не из-за границы .. это не правильный способ назвать это ... иначе как я могу вызвать функцию obj из стороны?Нельзя ли назвать функцию obj?

моя функция:

var popupHandler = function(handler,msg,popUp){ 

    msg = msg == "help" ? "help" : "results" 
    $(handler).click(function(){ 
     popObj.showPop(); //works 
    }) 
    $('.cls-how2play').click(function(){ 
     if(msg == 'help') popObj.closePop(); //works 
    }); 

    var popObj = { 
     showPop : function(){ 
        if(!(popUp).is(':visible')) $(popUp).fadeIn().children().find('.'+msg).show().siblings().hide(); 
       }, 
     closePop : function(){ 
        $(popUp).fadeOut() 
       } 
    } 
    return popObj; 
} 

от вызова находящиеся, как это:

$('.ui-footer').click(function(){ 
    var closeIt = popupHandler(); 
    closeIt.popObj.closePop() }) //not works.. why? 
} 

любой может помочь мне правильный способ вызова функции OBJ из внешней функции, возвращающей?

спасибо.

+0

'closeIt' уже является ссылкой на' popObj', насколько я могу видеть, из-за 'return popObj;'. –

+0

'msg = msg === 'help' || 'results'; ' –

+1

@roXon:' msg === 'help'' возвращает 'true'. Таким образом, вы получаете 'msg', либо являющийся« истинным », либо« результатом ». –

ответ

2

Как вы возвращаете popObj, ваш closeId получит только две функции, не завернутый в popObj объекта. Вы Therefor вызов функции, как это так, без popObj:

closeIt.closePop(); 
+0

даже я добавил код, что вы предлагаете, он называет этот метод. и объект не исчезает .. почему? любая хорошая причина .. – 3gwebtrain

+1

@ 3gwebtrain Я предполагаю, что, поскольку вы вызываете popupHandler без передачи каких-либо аргументов 'var closeIt = popupHandler();' ваша переменная 'popUp' будет' undefined', когда вы передадите ее при выборе '$ (popUp) .fadeOut() '. –

+0

Есть ли единственный способ передать параметр из метода или что-нибудь еще для fadeout? – 3gwebtrain

4

Вместо

closeIt.popObj.closePop() 

Вы хотите

closeIt.closePop() 

Ваш popupHandler функцию возвращаетpopObj объект, который имеет showPop и closePop функции на нем. Таким образом, closeIt является ссылкой на тот же объект.

1

Там нет необходимости, чтобы обернуть это в объекте, так как вы сразу же вернуть его.

вы можете написать

return{ 
showPop : function(){ 
        if(!(popUp).is(':visible')) $(popUp).fadeIn().children().find('.'+msg).show().siblings().hide(); 
       }, 
     closePop : function(){ 
        $(popUp).fadeOut() 
       } 
} 

Теперь closeIt.closePop(); должны работать очень хорошо.

1

Как я могу с

popupHandler является функцией, а popObj возврат результата функции «popupHandler»

, когда программа запуска в

var closeIt = popupHandler(); 

это означает, что " closeIt ", назначенный результатом функции" popupHandler ", объект obj, такой же, как и" popObj ".

вы можете считать, что «closeIt» является копией «popObj».

и "popObj" не является собственностью "closeIt", они то же самое.

поэтому вы должны кодировать closeIt.closePop(), но не closeIt.popObj.closePop(),

и не popObj.closePop(), а также.

потому что popObj был «var» ed в объявлении popupHandler, он принадлежал этой области.

Смежные вопросы