jquery click событие переопределяется при создании нового объекта - PullRequest
0 голосов
/ 06 августа 2010

Я пишу Ajax-приложение, которое использует функцию обратного вызова для добавления карты в руку игрока. объект создан правильно, и меню для каждого объекта также создано правильно.

при создании объекта DOM в функции обратного вызова, которую я использую для добавления объекта, у меня есть некоторый код, подобный этому:

$("#card"+cardNum).live('click',function(){                                                         
    $('#cardDiag'+cardNum).dialog('open');
}));

работает, когда создается первая карта, но после того, как я возьму вторую карту, нажатие на первую заставляет ее открыть меню второй карты. и после того, как вторая карта сыграна (и я удаляю ее меню), нажатие на любую карту ничего не делает, пока новая карта не будет извлечена снова.

это в основном то, что я делаю в обработчике обратного вызова для ajax.

function displayDrawnCardInHand(data){
var newCard = document.createElement('div');
//set some stuff on newCard
//and then add the cardyourHand = document.getElementById('hand');                                    yourHand.appendChild(newCard);
var cardMenu = document.createElement('div');                                      cardMenu.id= 'cardDiag' + data[cardNum];
//and then add the cardMenu to the DOM and call the click hander

Ответы [ 2 ]

1 голос
/ 06 августа 2010

Редактировать

Теперь я вижу вашу проблему: cardNum всегда будет оцениваться для каждого события щелчка, поэтому оно будет одинаковым для каждой карты, независимо от того, какое значение было, когдаВы сначала назначили событие клика.Вам нужно будет сохранить его в #card как значение данных:

$("#card"+cardNum).live('click',function(){
    num = $(this).data("num");                                               
    $('#cardDiag'+num).dialog('open');
})).data("num", cardNum);
0 голосов
/ 06 августа 2010
  1. Введите больше кода
  2. Используйте Firebug (ваш HTML может быть потерян)

Кроме того, я бы порекомендовал сделать что-то вроде связывания события вне вызова $.ajax:

$("div[id^=card]").live('click', function() { /* do binding */ });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...