Готовый пример: http://jsfiddle.net/fUHFp/1/ (если я понимаю, что вы собираетесь)
Делая это:
$("div").bind('click',(function() {
// ...
Вы назначаете событие нажатия на каждый div
на странице каждый раз, когда нажимается button
.
Полагаю, вы просто хотите присвоить его вновь созданному.
Вместо этого:
$("div").bind('click',(function() {
var box = $("div").index(this);
var idd = (this.id);
// ...
сделать это:
myDiv.bind('click',(function() {
var box = $("div").index(this);
var idd = (this.id);
// ...
, поэтому вы привязываетесь только к новому элементу <div>
.
То же самое произойдет с change()
событием, которое вы связываете внутри этого click
, как @ karim79 указал .
Также эта строка:
$(dividcount++);
... не имеет смысла. Вам не нужно оборачивать все в объект jQuery.
Просто сделайте это:
dividcount++;
Кроме того, вам не нужно клонировать <div>
, который вы только что создали, поскольку вы не сохраняете оригинал. И вам не нужно помещать myDiv
в объект jQuery, поскольку он уже равен единице.
Так вот:
$(myDiv).clone().appendTo('#ptest');
... может быть так:
myDiv.appendTo('#ptest');
РЕДАКТИРОВАТЬ: Что касается события .change()
, кажется, что вы пытаетесь изменить цвет всех динамических div'ов при изменении <select>
. Если так, то это не способ сделать это.
Вместо этого вы должны выбрать эти div по имени класса aaa
в обработчике change()
, чтобы установить цвет.
Так что полностью уберите обработчик change
из функции run()
и замените его следующим:
$("select").change(function(){
var str= $(this).find("option:selected").text();
$(".aaa").css("background-color",str);
});
Также нет причин перестраивать селектор для элемента, который у вас уже есть внутри обработчика click()
. Вы можете передать this
объекту jQuery.
Так вот:
$("#"+idd).text("div #"+idd);
должно быть так:
$(this).text("div #"+idd);