Autor | Zpráva | ||
---|---|---|---|
juriad Profil |
Přidal jsem do existujícího projektu ddpowerzoomer a některé skripty přestaly fungovat (server slučuje všechny .js soubory do jednoho). Zjistil jsem, že se žádnému prohlížeči (FF16, IE8, CH) nelíbil poslední řádek ddpowerzoomer.js (ten kde se volá
jQuery(document).ready(...) ) a to kvůli tomu, že "object is not a function" s drobnými variacemi napříč prohlížeči.
Problém byl v chybějcím středníku na konci volání funkce. Vím, že v javascriptu jsou středníky "nepovinné", ale zajímalo by mě, proč zrovna tady mu chybí? Podobná situace je například "jQuery.noConflict()" na řádku 9, kde mu ale středník nechybí... reálný kus problematického kódu (tak jak dorazí do prohlížeče): jQuery(document).ready(function($){ //initialize power zoomer on DOM load ddpowerzoomer.init($) }); /** * Coin Slider - Unique jQuery Image Slider * @version: 1.0 - (2010/04/04) * @requires jQuery v1.2.2 or later * @author Ivan Lazarevic * Examples and documentation at: http://workshop.rs/projects/coin-slider/ * Licensed under MIT licence: * http://www.opensource.org/licenses/mit-license.php **/ (function($){var params=new Array; a tady dál pokračuje jquery plugin slider, který se neprovede bez označeného středníku |
||
Joker Profil |
#2 · Zasláno: 18. 10. 2012, 15:51:50
juriad:
„(server slučuje všechny .js soubory do jednoho)“ Není právě to zdroj problémů? O podobné věci se zmiňuje Chamurappi v tomto příspěvku (poznámka, zbytek vlákna je o něčem jiném). |
||
juriad Profil |
#3 · Zasláno: 18. 10. 2012, 16:18:47
Joker:
ano, slučování ty problémy způsobuje prohlížeč vyhodnocuje kód nejspíše jako: jQuery(document).ready(... init powerzoomeru ...)(function($){... definice slideru ...})(jQuery); nenapadlo mě, že by bylo možné chápat kód tímto způsobem |
||
_es Profil |
#4 · Zasláno: 18. 10. 2012, 16:21:45
juriad:
„v javascriptu jsou středníky "nepovinné"“ Nie je to tak, dajú sa nahradiť koncami riadkov, no nie vždy, koniec riadka nemusí ukončiť príkaz. V JS, na rozdiel od iných jazykov, sú bodkočiarky len oddeľovače príkazov, nie ich „ukončovače“. |
||
peta Profil |
To, co popisujes, je spravne chovani.
a(b).c(function(d){e(f)}); (g) // upraveno a.c(h); (g) // jiny priklad a.c(h) // toto muze obecne vratit kod funkce (g) // a toto je pak jeji parametr, pokud tam ten strednik nedas Cili je to bez stredniku uplne stejny kod jako toto: <script> function b(c) {alert(c);} function a() {return b;} a() ('ahoj'); </script> |
||
Časová prodleva: 12 let
|
0