Как мне также удалить использование jQuery $ из файлов скриптов?
-
10-12-2019 - |
Вопрос
Я пытаюсь использовать элементы управления jQuery в среде разработки веб-методов Software AG..Теперь я импортирую скрипт jQuery со следующего URL-адреса:
http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
Когда я запускаю страницу, развернутую webMethods IDE, я получаю следующие ошибки в нескольких браузерах (между двумя синими стрелками):
Ошибки в середине - это обычные ошибки (т.е.ошибки с синими стрелками рядом с ними), которые я получаю, потому что что-то еще на странице также использует "$", когда jQuery также использует его, это приводит к тому, что этот другой пользователь "$" запутывается, поскольку этот другой пользователь "$" контролирует "знак "$" ..
Чтобы подтвердить это, вот что я сделал:
Я написал следующий javascript-код (не беспокойтесь о внутреннем использовании CAF.model
..его .id
функция возвращает идентификатор элемента управления на стороне клиента, необходимый jQuery для его обработки)
alert($(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());
...и это привело к еще одной из тех ошибок "getAttribute", показанных на рисунке выше..
Затем я попробовал:
jQuery.noConflict();
alert(jQuery(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());
И никакой ошибки не было..!
Кроме того, если я использую код:
jQuery.noConflict();
alert($(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id).val());
это приводит к ошибке с синей стрелкой внизу:Потому что другой объект, использующий знак "$", не может понять, что такое функция "val" ...
Вышеприведенное подтверждает мне, что ошибки возникают из-за того, что скрипт jQuery, вероятно, использует знак "$" для своего собственного использования..
Теперь, чтобы попытаться решить эту проблему, я попробовал добавить еще один блок скрипта до блок скрипта вызывает собственный файл скрипта jQuery и вставляет в него этот код:
jQuery.noConflict();
И это привело к первой ошибке с синей стрелкой:.."jQuery" не определен так рано в документе, что имеет смысл..
Итак, по сути, мне нужно каким-то образом указать основному файлу скрипта jQuery, чтобы он также не использовал знак "$"..Как мне это сделать?
Решение
jQuery.noConflict();
должен запускаться в блоке скрипта сразу после загрузки jQuery.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
var jq = jQuery.noConflict();
</script>
Приведенные выше псевдонимы jQuery для jq
вместо $
.
Плагины для jQuery передают объект jQuery и внутренне присваивают ему псевдоним $
, но область действия не является глобальной, поэтому нет необходимости изменять ее в плагинах.
Другие советы
Вам не стоит беспокоиться о внутренностях jQuery, они работают в любом случае.
Последнее сообщение об ошибке означает, что вы пытаетесь вызвать метод jQuery(.val()
) в элементе DOM, а не в объекте jQuery.
Вы уже знаете, что
$(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id)
приводит к ошибке, так почему же вызов должен jQuery.noConflict()
изменить это?
jQuery.noConflict()
просто "освобождает" $
и присваивает обратно значение, которое у него было ранее.
Вы либо должны использовать jQuery
во всем вашем коде или присвоите его другой переменной, например:
var $j = jQuery.noConflict();
$j(CAF.model("#{activePageBean.clientIds['txtDateInput']}").id);
То ready
обработчик событий также получает ссылку на jQuery в качестве первого параметра, поэтому вы (и должны) поместить туда весь свой код jQuery:
jQuery(function($) {
// $ will refer to jQuery
});
Но это не позволит вам получить доступ к значению чего бы то ни было $
ссылается за пределы этой функции.
Хороший способ сделать это - использовать самоисполняющуюся функцию, подобную этой:
(function ($) {
// Your jQuery code here - just use $ as normal!
$("#coolselector").cooljQueryPlugin();
})(jQuery);
Поместите это в свой код непосредственно перед закрывающим тегом body, чтобы ускорить загрузку страницы.Хотя с CAF и Prototype вы никогда не заметите ускорения :)