Функция jQuery click против встроенного onclick

У меня возникла ваша проблема, и вот мой ответ:

prices = [5, 12, 45]
list=['1','2','3']

for i in range(1,3):
  vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

, поэтому при печати:

price1 = 5 
price2 = 12
price3 = 45
10
задан ana 2 May 2009 в 23:07
поделиться

5 ответов

Поскольку вы динамически добавляете новые предметы в DOM, вам придется зарегистрируйте обработчик кликов снова новые элементы.

Для этого вы можете использовать .live .


Обновить

Начиная с jQuery 1.7, метод .on является предпочтительным способом сделать это.

Начиная с jQuery 1.9, метод .live был удален.

16
ответ дан 3 December 2019 в 16:30
поделиться

Просто демонстрирую использование .end () для более плавного решения:

$(function() {          
    $(".add2").click(function(){
            return $(this).parents(".place")
                .find(".add2")
                    .hide()
                .end()
                .find(".actions")
                    .append("<span class=\"added\">Added!</span> <a class=\"undoadd2\" href=\"#\">Undo</a>");
    });
    $('.undoadd2').live('click', function(){ 
            return $(this).parents(".place")
                .find(".actions")
                    .find("span.added, a.undoadd2")
                        .remove()
                    .end()
                .end()
                .find(".add2")
                    .show();
    });
});
4
ответ дан 3 December 2019 в 16:30
поделиться

Поскольку вы динамически добавляете новые элементы в DOM, вам придется снова зарегистрировать обработчик click для новых элементов. jQuery устанавливает обработчик при вызове $ ('...'). click (...) .

2
ответ дан 3 December 2019 в 16:30
поделиться

Ух ты! Спасибо всем вам!

Я читал о живом событии, и окончательный рабочий код:

$(function() {      
            $(".add2").click(function(){
                var placeId = $(this).parents(".place").attr("id");
                $("#" + placeId + " .add2").hide();
                $("#" + placeId + " .actions").append("<span class=\"added\">Added!</span> <a class=\"undoadd2\" href=\"#\">Undo</a>");
                return false;
            })
            $('.undoadd2').live('click', function(){ 
                var placeId = $(this).parents(".place").attr("id");
                $("#" + placeId + " .actions").find("span.added, a.undoadd2").remove();
                $("#" + placeId + " .add2").show();
                return false;
            });

Ранее я использовал remove () для удаления текста, предлагающего выполнить действие. Я изменил его для скрытия / показа, поэтому мне не нужно использовать live и в первой функции.

Еще раз спасибо!

2
ответ дан 3 December 2019 в 16:30
поделиться

The click handler isn't being picked up when you append the element to the DOM. Try using jQuery to register the click handler by changing the line(s) that look like:

$("#" + placeId + " .actions").append("<span class=\"added\">Added!</span> <a class=\"undoadd\" href=\"#\" onclick=\"undoAddPlace('" + placeId + "'); return false;\">Undo</a>")

To

$("#" + placeId + " .actions").append("<span class=\"added\">Added!</span> <a class=\"undoadd\" href=\"#\" >Undo</a>");
$('#' + placeId + " .actions").find("span:last").find("a").click( function() {
    undoAddPlace( placeId );
    return false;
});

You might be able to do it more simply, but it looks like you could be adding more than one span to the paragraph so I went conservative. You could also probably chain off append, but I thought the reselect made the point clearer.

1
ответ дан 3 December 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: