Onclick funktioniert nicht. Cannot read property 'klicken Sie auf' null
Ich bekomme immer wieder den folgenden Fehler aus der browser-Konsole beim laden mein script in meine Magento-Shop. Alle, die es hören, ist das onclick-Ereignis auf div aber dennoch erhalte ich diese Fehlermeldung:
"Uncaught TypeError: Cannot read property 'klicken Sie auf' null."
Das script funktioniert in JSfiddle also ich bin wirklich nicht ganz sicher, warum es nicht funktioniert. Ich habe versucht, umschließt es in ein $( document ).ready (), aber ich die gleiche Fehlermeldung erhalten.
Code:
var step = 0;
var deviceType = "";
var modelType = "";
function showGen(){
$('.phoneTypes').css("display", "none");
if (deviceType == "Samsung"){
$('.sphoneGens').css("display", "block");
}
if (deviceType == "iPhone"){
$('.iphoneGens').css("display", "block");
}
if (deviceType == "iPad"){
$('.ipadGens').css("display", "block");
}
}
//Pick Device Type
$('.choicelabel').click(function(){
deviceType = $(this).children('input').val();
showGen();
});
//Pick Device Gen
$('.choiceType').click(function(){
modelType = $(this).children('input').val();
//$(".iphoneGens").css("display", "none");
console.log(deviceType);
console.log(modelType);
$(this).parents(".row").hide();
});
Jede Hilfe, Debuggen dieses Problem wird sehr geschätzt werden.
- Dann heißt choiceType oder choicelabel nicht vorhanden
- Sollte es nicht leer zurück jQuery Sammlung dann?
- Ich merke, dass die meisten Klassen sind camelCased mit Ausnahme der '.choicelabel', ist das ein Tippfehler ist, wo es sein sollte."choiceLabel' ?
- Klingt wie jQuery wird nicht korrekt geladen wird, aufgrund der Tatsache, $ () sollte niemals null zurück. Oder etwas anderes als jQuery ist
$
- Ich denke, Ihr
$
war überschrieben durch einige nicht-jQuery-lib. VersuchenjQuery('.choicelabel').click
- Fragen dieser Art zeigen, sollte der säumige markup Zusammenhang mit dem Fehler, die in
$('.choicelabel').click(function(){ deviceType = $(this).children('input').val(); showGen(); });
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR:
Was ist das Problem?
Prototype.js
geladen wurde nachjQuery
war und überschreiben die globalen$
symbol.Wie können wir damit umgehen?
Haben Sie immer noch
jQuery
global zu verwenden. Nur verwenden Sie es überall dort, wo Sie Sie benutzen wollen$
.Können Sie auch definieren Sie Kürzel für die es vereinfachen:
Gemeinsamen best practice für Fälle wie diese ist die Verwendung IIFE wrap für deinen code:
Diesem nichts hinzufügt, um die Globale Reichweite und erreicht, was wir brauchen.
Sie können immer Spritzen einige andere Bibliotheken(prototypejs?) mit alias, was Sie wollen, um diese IIFE.
Hinweis-1: Semikolon vor IIFE schützt javascript aus früheren Ausdruck mit fehlenden Semikolon interpretiert werden als Funktion aufrufen.
jQuery selbst bietet die Kurzform für diesen Fall:
$
globalen symbol. Sie sind schlechter entwickelten plugins und alles, was Sie tun können, ist, wickeln Sie Ihren code mit IIFE aus eine Antwort. Möglicherweise werden Sie wollen, führen Sie alle von Ihnen, um einigejquery.libs.js
für diese. Oder können Sie vereinfachen Ihre Abhängigkeiten: Sind Sie wirklich benötigen jQuery und Prototype.js?jQuery is not defined
- Fügen Sie einfach ein onLoad-Zeug:jQuery(function(){ ... })
jQuery.getScript('http://phoneparter.com/js/parter.js')
in der Konsole funktioniert, das sind alles Sachen, an dem gearbeitet werden. So müssen Sie nur onLoad Sachen:$(function(){/*All code here*/})
Dass die Website nicht mit Hilfe von jQuery, es ist mit prototypejs