Поддержка Проблемы и решения JS: TypeError: $ is not a function

  • Всем привет. Решил сделать свои кнопки «Поделиться» руководствуясь этой статьёй.
    Создал JS -файл:

    var mcbsu_shareit = {
    	twitter: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://twitter.com/intent/tweet?";
    			url += "text=" + encodeURIComponent(data.text);
    			url += "&url=" + encodeURIComponent(data.url);
    			url += "&hashtags=" + "";
    			url += "&counturl=" + encodeURIComponent(data.url);
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	vk: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://vk.com/share.php?";
    			url += "url=" + encodeURIComponent(data.url);
    			url += "&title=" + encodeURIComponent(data.title);
    			url += "&description=" + encodeURIComponent(data.text);
    			url += "&image=" + encodeURIComponent(data.img);
    			url += "&noparse=true";
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	facebook: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://www.facebook.com/sharer.php?s=100";
    			url += "&p[title]=" + encodeURIComponent(data.title);
    			url += "&p[summary]=" + encodeURIComponent(data.text);
    			url += "&p[url]=" + encodeURIComponent(data.url);
    			url += "&p[images][0]=" + encodeURIComponent(data.img);
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	ok: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://connect.ok.ru/offer?";
    			url += "url=" + encodeURIComponent(data.url);
    			url += "&title=" + encodeURIComponent(data.title);
    			url += "&description=" + encodeURIComponent(data.text);
    			url += "&imageUrl=" + encodeURIComponent(data.img);
    			url += "&noparse=true";
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	data: function ($this) {
    		if ($this) {
    			return jQuery(document).parseJSON($this.parent("div").attr("data-share-data"));
    		};
    		return false;
    	},
    	popup: function (url) {
    		window.open(url, "", "toolbar=0, status=0, width=626, height=436");
    		return false;
    	}
    };

    Зарегистрировал его, добавил стили и, наконец добавил код:
    <div onclick="mcbsu_shareit.vk($(this))" class="vk" title="Поделиться в ВКонтакте"></div>
    Однако, код не срабатывает. Выдаёт ошибку при нажатии на «кнопку»:
    TypeError: $ is not a function

    Буду благодарен тому, кто поможет разобраться и поможет заставить код работать! Заранее спасибо!

    • Тема изменена 5 лет, 6 месяцев назад пользователем Alexander Babaev.
Просмотр 10 ответов — с 1 по 10 (всего 10)
  • поменяйте $ на jQuery

    А где поменять?

    ну как минимум в конструкциях типа share.twitter($(this)).
    и функцию в js-файле надо обернуть чем-то вроде:

    
    jQuery(document).ready(function($) {
    
    ...
    
    })
    

    и функцию в js-файле надо обернуть чем-то вроде:

    Это каждую функцию
    twitter: function ($this) {
    нужно обернуть так?
    Или в общем перед var так сделать?

    Это каждую функцию

    всю функцию один раз.

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

    всю функцию один раз.

    Увы, так не срабатывает …

    jQuery(document).ready(function($) {
    var mcbsu_shareit = {
    	twitter: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://twitter.com/intent/tweet?";
    			url += "text=" + encodeURIComponent(data.text);
    			url += "&url=" + encodeURIComponent(data.url);
    			url += "&hashtags=" + "";
    			url += "&counturl=" + encodeURIComponent(data.url);
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	vk: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://vk.com/share.php?";
    			url += "url=" + encodeURIComponent(data.url);
    			url += "&title=" + encodeURIComponent(data.title);
    			url += "&description=" + encodeURIComponent(data.text);
    			url += "&image=" + encodeURIComponent(data.img);
    			url += "&noparse=true";
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	facebook: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://www.facebook.com/sharer.php?s=100";
    			url += "&p[title]=" + encodeURIComponent(data.title);
    			url += "&p[summary]=" + encodeURIComponent(data.text);
    			url += "&p[url]=" + encodeURIComponent(data.url);
    			url += "&p[images][0]=" + encodeURIComponent(data.img);
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	ok: function ($this) {
    		var data = mcbsu_shareit.data($this);
    		if (data) {
    			var url = "https://connect.ok.ru/offer?";
    			url += "url=" + encodeURIComponent(data.url);
    			url += "&title=" + encodeURIComponent(data.title);
    			url += "&description=" + encodeURIComponent(data.text);
    			url += "&imageUrl=" + encodeURIComponent(data.img);
    			url += "&noparse=true";
    			mcbsu_shareit.popup(url);
    		};
    		return false;
    	},
    	data: function ($this) {
    		if ($this) {
    			return jQuery(document).parseJSON($this.parent("div").attr("data-share-data"));
    		};
    		return false;
    	},
    	popup: function (url) {
    		window.open(url, "", "toolbar=0, status=0, width=626, height=436");
    		return false;
    	}
    };
    });

    а консоль что пишет?
    ctrl+f5 в браузере нажимали?

    а консоль что пишет?

    ReferenceError: mcbsu_shareit is not defined

    ctrl+f5 в браузере нажимали?

    Да

    As of jQuery 3.0, $.parseJSON is deprecated.

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

    Решил проблему с помощью следующего кода:

    /* Скрипт для шорткода "Поделиться".
     *** Автор модификации скрипта: Александр Бабаев.
     *** Версия: 2.0
     */
    /* Twitter */
    function mcbsu_share_at_twitter (pstURL, pstTitle) {
    	var url = "https://twitter.com/intent/tweet?";
    	url += "text=" + encodeURIComponent(pstTitle);
    	url += "&url=" + encodeURIComponent(pstURL);
    	url += "&hashtags=" + "";
    	url += "&counturl=" + encodeURIComponent(pstURL);
    	window.open(url, "", "toolbar=0, status=0, width=626, height=436");
    	return false;
    };
    /* VK */
    function mcbsu_share_at_vk (pstURL, pstTitle, pstText, pstImg) {
    	var url = "https://vk.com/share.php?";
    	url += "url=" + encodeURIComponent(pstURL);
    	url += "&title=" + encodeURIComponent(pstTitle);
    	url += "&description=" + encodeURIComponent(pstText);
    	url += "&image=" + encodeURIComponent(pstImg);
    	url += "&noparse=true";
    	window.open(url, "", "toolbar=0, status=0, width=626, height=436");
    	return false;
    };
    /* Facebook */
    function mcbsu_share_at_facebook (pstURL, pstTitle, pstText, pstImg) {
    	var url = "https://www.facebook.com/sharer.php?s=100";
    	url += "&p[title]=" + encodeURIComponent(pstTitle);
    	url += "&p[summary]=" + encodeURIComponent(pstText);
    	url += "&p[url]=" + encodeURIComponent(pstURL);
    	url += "&p[images][0]=" + encodeURIComponent(pstImg);
    	window.open(url, "", "toolbar=0, status=0, width=626, height=436");
    	return false;
    };
    /* OK */
    function mcbsu_share_at_ok (pstURL, pstTitle, pstText, pstImg) {
    	var url = "https://connect.ok.ru/offer?";
    	url += "url=" + encodeURIComponent(pstURL);
    	url += "&title=" + encodeURIComponent(pstTitle);
    	url += "&description=" + encodeURIComponent(pstText);
    	url += "&imageUrl=" + encodeURIComponent(pstImg);
    	url += "&noparse=true";
    	window.open(url, "", "toolbar=0, status=0, width=626, height=436");
    	return false;
    };
Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «JS: TypeError: $ is not a function» закрыта для новых ответов.