Выпадающие окна, клонированные с помощью JQuery, не сохраняют поведение оригинала. - PullRequest
1 голос
/ 28 марта 2011

Что я пытаюсь сделать, так это клонировать 3 выпадающих списка и добавлять их под исходный набор.

В данный момент это работает, но клоны не поддерживают функциональность исходного набора.

Оригиналы проверяют выбранное значение первого раскрывающегося списка, чтобы заполнить раскрывающиеся списки для двух других.

Fiddle ниже, но добавление клонов, кажется, не работает по какой-то причине, которую я не могу понять, это работает на странице, над которой я работаю.

http://jsfiddle.net/pV6x5/6/

Спасибо

Martin

UPDATE

обновил скрипку, отсутствовал advancedsearch div: http://jsfiddle.net/pV6x5/7/

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

Используйте jQuery live, чтобы привязать событие к новым элементам.С live он связывает событие со всеми существующими и будущими элементами, где простое определение обработчика изменений будет связывать только текущие элементы (вы также можете просто присоединять события каждый раз, когда создаете элемент, но зачем это делать, когда live заботится о немдля вас)

$tags.live("change",function(){ /* your stuff here */});

ОБНОВЛЕНИЕ Вот функция изменения и если блок:

$(document).ready(function() 
{
$tags = $("select[name='tags']");

$tags.live("change",function()
{
    $operands = $(this).parent().find("select[name='operands']");
    $values = $(this).parent().find("select[name='values']");
if ($(this).val() == "agent") 
{

$(this).parent().find("select[name='operands'] option").remove();

$("<option>=</option>").appendTo($operands);
$("<option>!=</option>").appendTo($operands);

$(this).parent().find("select[name='values'] option").remove();
$("<option>excel</option>").appendTo($values);
$("<option>msword</option>").appendTo($values);
$("<option>ppt</option>").appendTo($values);
$("<option>pdf</option>").appendTo($values);
$("<option>image</option>").appendTo($values);
$("<option>txt</option>").appendTo($values);
$("<option>html</option>").appendTo($values);
$("<option>csv</option>").appendTo($values);
$("<option>ooxml</option>").appendTo($values);
$("<option>flash</option>").appendTo($values);
$("<option>wmf</option>").appendTo($values);
}
1 голос
/ 28 марта 2011

Я считаю, что вам нужно использовать привязку .live (), чтобы она прикрепляла события к объектам, созданным «в будущем».http://api.jquery.com/live/

Таким образом, вместо .change () вам нужен .live ('change')

...