Динамически создать функцию JS - PullRequest
1 голос
/ 21 июля 2011

Я хочу динамически (в цикле) связать функцию с событием .click() нескольких делений. Функция щелчка должна затем скрыть нажатой div. Как я и пытался, я потерял ссылку на div и «this». у меня тоже не работает.

вот функция, которую я хочу связать:

function do_hide() {  
    is_anim = true;  
    $(this).animate({

        opacity: 0.25,
        height: 'toggle',
        width: 'toggle'
    }, 5000, function() {

        is_anim = false;
        this.hide();
    });
}

спасибо за любую помощь.

РЕДАКТИРОВАТЬ: решение с помощью гея

do_hide () вызывается здесь:

for (var i = 0; i < n; i++)
{    
p[i] = $("#btn"+(i+1));

p[i].click(function() {
   do_hide.call(this);
 });
}

Ответы [ 4 ]

4 голосов
/ 21 июля 2011

Вы можете использовать jquery live для этой цели.

Просто напишите код для скрытия в функции, которую вы привязываете в прямом эфире, например. $ (Это) .hide ()

1 голос
/ 21 июля 2011

У Jatin есть решение, которое вы ищете.

Вы связывали событие click только один раз или каждый раз, когда создавали новый div?

В любом случае, если вы используете метод .live для привязки, он будет связывать события при создании элементов.

Добавление этого в любом месте на вашей странице должно заставить его работать:

$('div').live('click',do_hide);

http://jsfiddle.net/E65wk/

1 голос
/ 21 июля 2011

Вы можете связать область видимости 'do_hide', когда вы ее вызываете. Я хотел бы предложить шаблон, подобный следующему: (работает JSFiddle )

 $('.stackoverflow').click(function() {
   do_hide.call(this); 
 });

 var do_hide = function()
 {  
   is_anim = true;  
   $(this).animate({
     opacity: 0.25,
     height: 'toggle',
     width: 'toggle'
   }, 5000, 
                  function() {
                    is_anim = false;
                    this.hide();
                  });
 };

Надеюсь, это поможет!

0 голосов
/ 21 июля 2011

$ ('divselector'). Click (do_hide);

Это должно сработать.Или в вашем клике есть другой код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...