2009-12-08 1 views
0

Недавно я обновил приложение от jQuery 1.2 до 1.3.2 - и мы обнаружили довольно странную регрессию.Селекционная регрессия после обновления до jQuery 1.3.2

Для некоторых HTML примерно как это (упрощенный бит)

<div id="steps"> 
    <div class="step"> 
    <span>step #1</span> 
    <div class="removeStep"> X </div> 
    </div> 
    <div class="step"> 
    <span>step #2</span> 
    <div class="removeStep"> X </div> 
    </div> 
</div> 

Ранее мы прикрепленного событие, как это так, для всех этапов:

$("#steps").find(".removeStep").click(removeStepFunc) 

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

Это также не работает:

#("#steps .removeStep").click(removeStepFunc) 

Однако это делает:

#("#steps).children().find(".removeStep").click(removeStepFunc) 

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

Также я вижу этот другой вопрос, который, как я подозреваю, может быть той же проблемой?

jQuery selector bug? composed selector vs. simple selector & find()

+0

Для меня jQuery 1.3.2 выбирает оба .removeStep DIVs и прикрепляет события к обоим (ночная сборка Firefox). Фактически, все три селектора, которые вы подробно описываете выше, возвращают оба этих элемента для меня. В каком браузере вы это пытаетесь? Могли бы вы иметь более одного элемента с идентификаторами «шаги»? –

+0

Дополнительно - $ (". RemoveStep") также возвращает только первый элемент ... это на FireFox 3.5.5 – Bittercoder

+0

$ ('. RemoveStep') также возвращает обе записи. Вы проверяете с помощью console.log ($ ('. RemoveStep')), чтобы увидеть, что элементы найдены, и что это не что-то не так с вашим обработчиком кликов? –

ответ

0

ли устранили этот вопрос после того, как наткнуться на этот пост:

http://groups.google.com/group/jquery-en/browse_thread/thread/ae61896a809f6cf0

Проблемы были испытывавших были вызваны нашей использованием старой версии плагина Jquery Validator (v1.3), который несовместим с jQuery 1.3.2. Теперь проблема решена, и мы обновили ее до версии 1.6.

0

Попробуйте следующее:

jQuery('#steps > .removeStep').click(removeStepFunc) 

или

jQuery('#steps .step .removeStep').click(removeStepFunc) 
шаг # 1 Х шаг # 2 Х

UPDATE

А что-то вроде этого? (Непроверенные):

jQuery('#steps .removeStep').click(function() { 
    jQuery(this).remove(jQuery(this).parent()); 
}); 
+0

К сожалению, это не работает, вот результаты тестирования: $ ("# steps> .removeStep") -> 0 совпадений $ ("# steps> .step> .removeStep ") -> 1 соответствует $ (" # steps div "). find (". removeStep ") -> 1 соответствует $ (" # steps .step .removeStep ") -> 1 совпадение $ («.step .removeStep») -> 1 соответствует $ (". step"). find (". removeStep") -> 1 соответствует $ ("# steps"). children() -> 3 совпадения $ («#steps»). children(). find (". removeStep") -> 3 совпадения Я не верю, что проблема заключается в jQuery, так как это некоторая другая библиотека (возможно, ExtJS?), мешающая jQuery'у нормальное поведение. Это довольно фундаментальная часть jQuery :) – Bittercoder

+0

Если вы помещаете предупреждение внутри 'jQuery ('# steps .removeStep'). Click' и эти триггеры предупреждений, ваш jQuery отлично работает. Для тестирования вы можете удалить ExtJS и посмотреть, поможет ли это. – Steven

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

  • Нет связанных вопросов^_^