У меня возникла ваша проблема, и вот мой ответ:
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
Поскольку вы динамически добавляете новые предметы в DOM, вам придется зарегистрируйте обработчик кликов снова новые элементы.
Для этого вы можете использовать .live
.
Обновить
Начиная с jQuery 1.7, метод .on
является предпочтительным способом сделать это.
Начиная с jQuery 1.9, метод .live
был удален.
Просто демонстрирую использование .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();
});
});
Поскольку вы динамически добавляете новые элементы в DOM, вам придется снова зарегистрировать обработчик click
для новых элементов. jQuery устанавливает обработчик при вызове $ ('...'). click (...)
.
Ух ты! Спасибо всем вам!
Я читал о живом событии, и окончательный рабочий код:
$(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 и в первой функции.
Еще раз спасибо!
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.