Проблема jQuery .live и parent () - PullRequest
       3

Проблема jQuery .live и parent ()

0 голосов
/ 17 января 2011

У меня есть много этого фрагмента кода:

<li>
  <label>
    <a title="Cadeo">
      <span class="container">
        <img class="shadow" src="../public/4cf54b32bd723_small.jpg" alt="" />
      </span>
    </a>
    <input name="Trailer" type="radio" value="1" />
    <span class="change">Seleziona</span>
  </label>
</li>

Благодаря этому коду jQuery, при нажатии на тег (который содержит все) текст «Селезиона» заменяется тегом кнопки:

$('label').click(function(){
  $('label').children('span.change').html('Seleziona'); // reset the others li's text
  $(this).children('span.change').html('<button type="button" class="small middle"><img src="../images/vota-small.png" alt="" /></button>')
})

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

$('button').live('click', function(){
  alert($(this).parent().siblings('input').val());
})

Где я не прав? Я продолжаю получать "неопределенный" ... Заранее спасибо за ответы

Если это может помочь, вот живая версия: http://jsfiddle.net/H4Gsq/

Ответы [ 3 ]

1 голос
/ 17 января 2011

Попробуйте это -

$('button').live('click', function(e){
  e.stopPropagation();
  alert($(this).parent().prev('input').val());

})

На самом деле, когда вы нажимаете кнопку в это время, этот щелчок будет распространяться даже на метку, и, следовательно, будет активирована функция щелчка метки.Этот эффект известен как пузырение.Для пошагового всплытия событий я использовал e.stopPropagation()

0 голосов
/ 17 января 2011

Во-первых, почему parent()? Входными данными является родственный элемент диапазона, а не родственный элемент его родителя. Во-вторых, оба обработчика событий будут срабатывать при нажатии кнопки. stopPropagation не поможет, так как live сам по себе полагается на всплытие событий; кроме того, обработчики событий в реальном времени запускаются после обычных обработчиков событий. Вы должны проверить event.target и, если это кнопка, пропустить обработчик щелчка метки.

Забудьте первую часть, я не внимательно прочитал код. В любом случае, вот исправленная версия: http://jsfiddle.net/H4Gsq/1/

0 голосов
/ 17 января 2011

почему бы не запустить собственный триггер, а затем соответствующим образом манипулировать им ...

...