JQuery - проблема noConflict()
У меня проблема, возможно, с тем, как я пытаюсь это сделать.
Либо ползунок будет работать. или изображения заменят текст. но не оба.
Я должен иметь этот файл "scrollbox.min.js", связанный для работы слайдера. поэтому я использую noConflict.
Я хочу, чтобы нижеприведенный фрагмент использовал файл scrollbox.min.js:
<script>
jQuery().noConflict();
jQuery(function($) {
$(document).ready(function() {
jQuery('#scrool').scrollbox({
direction: 'h',
switchItems: 3,
distance: 540,
autoPlay: false
});
jQuery('#scrool-backward').click(function() {
jQuery('#scrool').trigger('backward');
});
jQuery('#scrool-forward').click(function() {
jQuery('#scrool').trigger('forward');
});
})
}
</script>
и я хочу, чтобы остальные использовали сайт jQuery.
Что-то, что я заметил:
В зависимости от того, где я размещаю jQuery(). noConflict(); он позволяет выполнять различные разделы кода. Мне нужно, чтобы оба работали:
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Пожалуйста, см. ниже полную часть script:
<script src="http://www.qwerty.com/assets/xjs/jquery.scrollbox.min.js"></script>
<script>
jQuery().noConflict();
jQuery(function($) {
$(document).ready(function() {
jQuery('#scrool').scrollbox({
direction: 'h',
switchItems: 3,
distance: 540,
autoPlay: false
});
jQuery('#scrool-backward').click(function() {
jQuery('#scrool').trigger('backward');
});
jQuery('#scrool-forward').click(function() {
jQuery('#scrool').trigger('forward');
});
});
});
</script>
<script>
jQuery(function($) {
$(document).ready(function() {
jQuery('.starIMGrating').each(function(i, obj) {
var myString = jQuery(this).html()
if (myString > "5") {
var myString = "5"
} else {}
/* alert(myString); */
myRegexp3 = /\d/;
var match = myRegexp3.exec(myString);
var myRegexp2 = /\d\.(\d)/;
var matchstring = myString;
var m;
if (myString.indexOf(".") == -1) {
var match2 = 0;
} else if (myString.indexOf(".") == 1) {
var m = myRegexp2.exec(matchstring)
var match2 = m[1];
}
starIMG = "<img src='http://qwerty/" + match + "_" + match2 + "/5/rating.gif' alt='' style='width:70px !important;' />";
/*alert(match2); */
jQuery(this).html(starIMG);
/* alert(starIMG); */
});
});
});
</script>
Ответы
Ответ 1
Вызов jQuery().noConflict();
вызовет ошибку:
Uncaught TypeError: jQuery (...). noConflict не является функцией
Что, если не внутри блока try { ... }
, приведет к тому, что остальная часть этого script не будет выполнена вообще.
noConflict
является частью основного объекта пространства имен jQuery
, но не отдельных объектов jQuery, поэтому вы должны удалить скобки из jQuery()
:
jQuery.noConflict();
Смотрите это для получения дополнительной информации: http://learn.jquery.com/using-jquery-core/dollar-object-vs-function/
Ответ 2
Как уже упоминалось, вам нужно использовать jQuery.noConflict()
, но всякий раз, когда вы отлаживаете что-то подобное, вы хотите свести к минимуму все движущиеся части. То, что я расскажу ниже, вряд ли вызовет у вас какие-либо проблемы, но в нем подчеркивается очень вопиющее злоупотребление jQuery, и вы должны попробовать и следовать. У вас есть следующий код:
jQuery(function ($) {
$(document).ready(function(){
...
});
});
Это эквивалентно написанию следующего:
jQuery(document).ready(function ($) {
$(document).ready(function(){
...
});
});
Вы видите двуличие? Позвольте мне объяснить:
-
Следующие две строки идентичны:
$(function() { /* execute code */ });
$(document).ready(function () { /* execute code */ });
Поэтому, когда вы помещаете один из них внутри другого, как вы это делали, вы по существу говорите: "Подождите, пока документ будет готов, а затем подождите, пока документ не будет готов снова, а затем выполните код". Это лишний и ненужный.
-
Всякий раз, когда вы используете любой из вышеперечисленных "готовых документов", вы можете дать jQuery другое имя для использования в функции обратного вызова. Например, мы могли бы переименовать jQuery в fOobar
, если хотим:
$(function(fOobar) {
fOobar('#scroll').trigger('forward');
});
-
Приведенный выше метод особенно полезен при использовании noConflict()
. Никто не любит набирать jQuery
, потому что знак $
доллара намного проще. Но noConflict()
означает, что вы не можете использовать знак доллара. Чтобы исправить это, мы можем переименовать jQuery обратно в знак доллара, не затрагивая другой код на странице:
jQuery.noConflict();
jQuery(function ($) {
// you can safely use the dollar sign variable inside this function
// instead of the cumbersome `jQuery` variable.
});
-
Наконец, каждый раз, когда вы передаете селектор jQuery, он должен много работать, чтобы найти этот элемент на странице. Чтобы JQuery слишком устал, мы можем сохранить (или кеш) работу, которую JQuery выполнил и повторно ее использовал. Вот как выглядел бы ваш код, если бы вы кэшировали элемент #scroll
:
jQuery.noConflict();
jQuery(function ($) {
// get the #scroll element once and reuse it
var $scroller = $('#scroll');
$scroller.scrollbox({
direction: 'h',
switchItems: 3,
distance: 540,
autoPlay: false
});
$('#scrool-backward').click(function() {
$scroller.trigger('backward');
});
$('#scrool-forward').click(function() {
$scroller.trigger('forward');
});
});
Ответ 3
Смотрите: jQuery.noConflict().
Вы получите следующее:
jQuery.noConflict();
(function($) {
$(document).ready(function() {
$('#scrool').scrollbox({
direction: 'h',
switchItems: 3,
distance: 540,
autoPlay: false
});
$('#scrool-backward').click(function() {
$('#scrool').trigger('backward');
});
$('#scrool-forward').click(function() {
$('#scrool').trigger('forward');
});
});
}(jQuery);
Ответ 4
Здесь в основном у вас есть два экземпляра библиотеки jquery (файл библиотеки jquery добавляется дважды на страницу), поэтому гораздо проще было бы иметь только один экземпляр библиотеки jquery, поэтому, если бы вы могли каким-то образом добавить один например, тогда вам будет легко, мне любопытно узнать, почему это невозможно.
С другой стороны, если вы не можете удалить лишний экземпляр jQuery, то вы можете сделать одно, сохранить последний экземпляр jquery в переменной страницы, а затем не называть конфликт. например.
var $$ = $;
jQuery.noConflict();
$$('#scroll').scrollbox({})
поэтому вы можете использовать scrollbox с $$, т.е. $$ ('# scroll'). scrollbox ({}) и другие вещи с одиночным $
Ответ 5
Если вы используете CDN, пожалуйста, убедитесь, что вы подключены к Интернету. Потому что сейчас у меня такая же проблема. Затем я захожу в Google, чтобы найти решение, и я подключаю свой ноутбук к Интернету, и все начинает работать как раньше.