2010-06-24 4 views
2

надеюсь, что может помочь, пробуя клон JQuery, который, кажется, работает, но я получаю «множественные» клоны, а не отдельные клоны при «подавлении» кнопки.jquery clone несколько экземпляров, почему

например: Я хочу, чтобы клонировать это:

echo '<select class="hello">'; 
    foreach ($pageposts as $post): 
    echo '<option>'.$post->post_title.'</option>'; 
    endforeach; 
    echo '</select>'; 

по щелчку этого

echo '<input type="button" id="rp" value="add">'; 

Да от WordPress и да класс "привет" от страниц JQuery

Мои Функция JQuery:

$j=jQuery.noConflict(); 
$j(document).ready(function() { 
$j('#rp').click(function(){ 
$j('.hello').clone().appendTo('#goodbye'); 
}); 
}); 

Так что мой «общий код Snippit» выглядит следующим образом:

echo '<select class="hello">'; 
foreach ($pageposts as $post): 
echo '<option>'.$post->post_title.'</option>'; 
endforeach; 
echo '</select>'; 
echo '<div id="goodbye"></div>'; 
echo '<input type="button" id="rp" value="add">'; 

клонировать «один раз» на первом прессе, но затем он идет в кратные, то есть:

1 клик дает 1 клон плюс 1 оригинал - что я хочу

2 клик дает 3 клонов плюс 1 оригинал - не то, что я хочу, я хочу, 1 оригинал и 2

3 щелчков дают 7 клонов плюс 1 оригинал - не то, что я хочу, я хочу, 1 оригинал плюс 3 и т.д.

Предложения пожалуйста. Благодаря

ответ

6

Это потому, что ваш селектор ищет класс:

$j('.hello') 

Everytime вы клонировать и добавить это к другому элементу вы добавляете еще один .hello элемента, поэтому вашему клонировать каждый .hello элемент может найти ,

Может быть, вы должны удалить имя класса, когда он был клонирован:

$j('.hello').clone().removeClass('hello').appendTo('#goodbye'); 

или, возможно, даже изменить его:

$j('.hello').clone().removeClass('hello').addClass('cloned_hello').appendTo('#goodbye'); 

Вы можете добавить другой класс, чтобы ваш CSS будет по-прежнему работать , но в конечном итоге именно поэтому вы получаете несколько клонированных предметов.

+0

Спасибо ILMV - Durrrr, конечно, я пропускаю очевидное, как обычно. – user351657

+0

Еще раз спасибо ILMV - ваш явно более быстрый тир, чем я, вы избили меня в аспекте .removeClass ('hello').Большое спасибо, проблема решена – user351657

+0

ILMV - просто быстрая заметка, которую я принимаю «Ответы» - иногда я нахожу «Ответы» - это не ответы - (в отличие от вашего) Просто не могу нажимать кнопку на несколько минут. все же! – user351657

1

поведение нормальное, потому что вы клонируете каждый элемент, в котором есть класс приветствия.

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

$j('.hello').clone().attr("class","cloned").appendTo('#goodbye'); 

И вы положили в вашем CSS то же самое в .cloned как в .hello.

Надеюсь, это поможет :)

+0

Вы не должны использовать метод '.attr' для добавления/редактирования/удаления классов из атрибута, так как вы можете иметь несколько классов, ваш метод будет перезаписывать другие. Вместо этого используйте '.addClass' и' .removeClass' :-) –

+0

Здесь есть только один класс, поэтому он ничего не перезаписывает, но я согласен, в общем, это не самое лучшее! –

+0

В некоторых ситуациях приложение addClass/removeClass не работает постоянно. Исключительно меняя класс на что-то другое, для моего конкретного случая, было лучшим решением. В частности, создание кешированной переменной клона - это то, что создавало противоречивые результаты. В jQuery вы всегда хотите работать в абсолютах, где это возможно. При таком подходе вы всегда можете добавить обратно в классы, которые вы перезаписали. –

Смежные вопросы