Как мне также удалить использование jQuery $ из файлов скриптов?

StackOverflow https://stackoverflow.com//questions/9633812

  •  10-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать элементы управления jQuery в среде разработки веб-методов Software AG..Теперь я импортирую скрипт jQuery со следующего URL-адреса:

http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

Когда я запускаю страницу, развернутую webMethods IDE, я получаю следующие ошибки в нескольких браузерах (между двумя синими стрелками):

enter image description here

Ошибки в середине - это обычные ошибки (т.е.ошибки с синими стрелками рядом с ними), которые я получаю, потому что что-то еще на странице также использует "$", когда 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 вы никогда не заметите ускорения :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top