2013-11-22 8 views
0

Я нашел странную вещь. На моем веб-сайте мне нужно использовать jQuery и Prototype.js, поэтому у меня есть jQuery в неконфликтном режиме, и он отлично работает. Но у меня есть сценарий jQuery, который выделяет стили, а когда выбран элемент, скрипт запускает метод обновления jQuery.Prototype.js erase select on jQuery trigger update

Но по какой-то причине Prototype.js высоко оценивает этот вызов обновления и удаляет все содержимое поля выбора, которое я не хочу. Вот пример кода:

<html> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
     <script type="text/javascript">jQuery.noConflict(); </script> 
     <script src="//ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js"></script>  
    </head> 

    <body> 
     <select id="test"> 
      <option>1</option> 
      <option>2</option> 
     </select> 

     <span onclick="jQuery('#test').trigger('update');">update</span>   
    </body> 
</html> 

`

А вот скрипку тест: http://jsfiddle.net/verify/xq9rb/

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

ответ

1

Вы правы - из-за того, что jQuery запускает события - он сначала попытается запустить любой метод на элементе (или продвинуться вверх по цепочке прототипов), а затем запустить событие.

Я предлагаю использовать пространство имен для предотвращения конфликтов, сходных с тем, как PrototypeJS обрабатывает события.

jQuery('#test').trigger('vendor:update');