JQuery: связать по клику - PullRequest
       19

JQuery: связать по клику

1 голос
/ 05 сентября 2010
    $(document).ready(function() {    
    $('a#fav').bind('click', addFav(<?php echo $showUP["uID"]; ?>));
});

было раньше

    $(document).ready(function() {    
    $('a#fav').bind('click', addFav);
});

Я добавил (<?php echo $showUP["uID"]; ?>), потому что я хочу, чтобы идентификатор профиля пользователя работал с вызовом addFav ajax.

Так что у меняв нижней части моей страницы, и теперь, даже если я нажал на a # fav, он запускается?Но он не запускается сам, когда у меня нет (id)

Heres addFav в случае:

function addFav(id){
    $.ajax({
      url: "misc/favAdd.php",
      data: { id: id},
      success: function(){
           $('a#fav')
                 .addClass('active')
                 .attr('title','[-] Remove as favorite')
                 .unbind('click')
                 .bind('click', removeFav(id))
           ;
                jGrowlTheme('wallPop', 'mono', '[+] Favorit', 'Du har nu lagt till denna profil som favorit', 'images/addFavorit_hover2.png', 1000);
      }
    });
}

function removeFav(id){
    $.ajax({
      url: "misc/favRemove.php",
      data: { id: id },
      success: function(){
            $('a#fav')
                 .removeClass('active')
                 .attr('title','[+] Add as favorite')
                 .unbind('click')
                 .bind('click', addFav(id))
            ;
                            jGrowlTheme('wallPop', 'mono', '[-] Favorit', 'Du har nu tagit bort denna profil som favorit', 'images/addFavorit_hover2.png', 1000);
      }
    });
}

Ответы [ 2 ]

6 голосов
/ 05 сентября 2010

Вторым параметром функции bind является сама функция. Когда вы передаете функцию в качестве параметра, вы должны указать только имя функции, а не открывающую / закрывающую скобки или аргументы.

В вашем случае, если вы хотите передать параметры в функцию addFav, вы можете сделать это, передав анонимную функцию в bind, и в теле этой функции вызовите addFav, как нормально бы с твоими параметрами. Как это:

$(document).ready(function() {    
    $('a#fav').bind('click', function() {
        addFav(<?php echo $showUP["uID"]; ?>);
    });
});
4 голосов
/ 05 сентября 2010

Вам нужна аномальная функция, такая как onload:

$(function() {    
  $('a#fav').click(function(
    addFav(<?php echo $showUP["uID"]; ?>)
  });
});

И этот стиль в ваших success обратных вызовах:

$('#fav').click(function() {
  addFav(id);
});

, поскольку #fav должен быть уникальным идентификатором, это намного более быстрый селектор.


Или передать его в качестве аргумента данных в .bind(), например:

$('a#fav').bind('click', { id: id }, addFav);

И в вашей функции доступ к ней осуществляется таким образом, а не в качестве параметра, например:

function addFav(e){
  var id = e.data.id;
...