Avatar billede lone_a_p Praktikant
01. juli 2008 - 09:47 Der er 17 kommentarer og
1 løsning

Fejl i DOCTYPE-linje

Kære eksperter,

Er der nogen, der har en idé om, hvorfor min hjemmeside (madital.dk) melder script-fejl første linje - og kun i IE, ikke i Firefox.

Jeg har hele tiden haft denne doctype, men den er først begyndt at melde om fejl nu - mener jeg!

Skal jeg ændre doctype til noget andet? - eller hvordan kommer jeg af med fejlen?

Når jeg trykker opdater med F5 melder den enkelte side i øvrigt ikke om fejl - men alle andre gør indtil man trykker F5.

Mvh Lone
Avatar billede pidgeot Nybegynder
01. juli 2008 - 09:56 #1
Det er nok snarere et problem i en script-fil - men det er lidt svært at gætte når vi ikke kan se siden :)
Avatar billede lone_a_p Praktikant
01. juli 2008 - 10:04 #2
Oh, tak :)
Har allerede fundet scriptet ... mangler bare fejlen - men det er nemlig tilføjet for nyligt :)

Vil du ik give et svar, så får du point.

Mvh Lone
Avatar billede pidgeot Nybegynder
01. juli 2008 - 10:07 #3
Nej tak - tag dem selv (hvis du ikke vil smide scriptet herind og lade os finde fejlen, vel at mærke). :)
Avatar billede lone_a_p Praktikant
01. juli 2008 - 10:13 #4
/**
* http://www.openjs.com/scripts/events/keyboard_shortcuts/
* Version : 2.01.B
* By Binny V A
* License : BSD
*/
shortcut = {
    'all_shortcuts':{},//All the shortcuts are stored in this array
    'add': function(shortcut_combination,callback,opt) {
        //Provide a set of default options
        var default_options = {
            'type':'keydown',
            'propagate':false,
            'disable_in_input':false,
            'target':document,
            'keycode':false
        }
        if(!opt) opt = default_options;
        else {
            for(var dfo in default_options) {
                if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
            }
        }

        var ele = opt.target
        if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
        var ths = this;
        shortcut_combination = shortcut_combination.toLowerCase();

        //The function to be called at keypress
        var func = function(e) {
            e = e || window.event;
           
            if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
                var element;
                if(e.target) element=e.target;
                else if(e.srcElement) element=e.srcElement;
                if(element.nodeType==3) element=element.parentNode;

                if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
            }
   
            //Find Which key is pressed
            if (e.keyCode) code = e.keyCode;
            else if (e.which) code = e.which;
            var character = String.fromCharCode(code);
           
            if(code == 188) character=","; //If the user presses , when the type is onkeydown
            if(code == 190) character="."; //If the user presses , when the type is onkeydown

            var keys = shortcut_combination.split("+");
            //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
            var kp = 0;
           
            //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
            var shift_nums = {
                "`":"~",
                "1":"!",
                "2":"@",
                "3":"#",
                "4":"$",
                "5":"%",
                "6":"^",
                "7":"&",
                "8":"*",
                "9":"(",
                "0":")",
                "-":"_",
                "=":"+",
                ";":":",
                "'":"\"",
                ",":"<",
                ".":">",
                "/":"?",
                "\\":"|"
            }
            //Special Keys - and their codes
            var special_keys = {
                'esc':27,
                'escape':27,
                'tab':9,
                'space':32,
                'return':13,
                'enter':13,
                'backspace':8,
   
                'scrolllock':145,
                'scroll_lock':145,
                'scroll':145,
                'capslock':20,
                'caps_lock':20,
                'caps':20,
                'numlock':144,
                'num_lock':144,
                'num':144,
               
                'pause':19,
                'break':19,
               
                'insert':45,
                'home':36,
                'delete':46,
                'end':35,
               
                'pageup':33,
                'page_up':33,
                'pu':33,
   
                'pagedown':34,
                'page_down':34,
                'pd':34,
   
                'left':37,
                'up':38,
                'right':39,
                'down':40,
   
                'f1':112,
                'f2':113,
                'f3':114,
                'f4':115,
                'f5':116,
                'f6':117,
                'f7':118,
                'f8':119,
                'f9':120,
                'f10':121,
                'f11':122,
                'f12':123
            }
   
            var modifiers = {
                shift: { wanted:false, pressed:false},
                ctrl : { wanted:false, pressed:false},
                alt  : { wanted:false, pressed:false},
                meta : { wanted:false, pressed:false}    //Meta is Mac specific
            };
                       
            if(e.ctrlKey)    modifiers.ctrl.pressed = true;
            if(e.shiftKey)    modifiers.shift.pressed = true;
            if(e.altKey)    modifiers.alt.pressed = true;
            if(e.metaKey)  modifiers.meta.pressed = true;
                       
            for(var i=0; k=keys[i],i<keys.length; i++) {
                //Modifiers
                if(k == 'ctrl' || k == 'control') {
                    kp++;
                    modifiers.ctrl.wanted = true;

                } else if(k == 'shift') {
                    kp++;
                    modifiers.shift.wanted = true;

                } else if(k == 'alt') {
                    kp++;
                    modifiers.alt.wanted = true;
                } else if(k == 'meta') {
                    kp++;
                    modifiers.meta.wanted = true;
                } else if(k.length > 1) { //If it is a special key
                    if(special_keys[k] == code) kp++;
                   
                } else if(opt['keycode']) {
                    if(opt['keycode'] == code) kp++;

                } else { //The special keys did not match
                    if(character == k) kp++;
                    else {
                        if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
                            character = shift_nums[character];
                            if(character == k) kp++;
                        }
                    }
                }
            }
           
            if(kp == keys.length &&
                        modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
                        modifiers.shift.pressed == modifiers.shift.wanted &&
                        modifiers.alt.pressed == modifiers.alt.wanted &&
                        modifiers.meta.pressed == modifiers.meta.wanted) {
                callback(e);
   
                if(!opt['propagate']) { //Stop the event
                    //e.cancelBubble is supported by IE - this will kill the bubbling process.
                    e.cancelBubble = true;
                    e.returnValue = false;
   
                    //e.stopPropagation works in Firefox.
                    if (e.stopPropagation) {
                        e.stopPropagation();
                        e.preventDefault();
                    }
                    return false;
                }
            }
        }
        this.all_shortcuts[shortcut_combination] = {
            'callback':func,
            'target':ele,
            'event': opt['type']
        };
        //Attach the function with the event
        if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
        else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
        else ele['on'+opt['type']] = func;
    },

    //Remove the shortcut - just specify the shortcut and I will remove the binding
    'remove':function(shortcut_combination) {
        shortcut_combination = shortcut_combination.toLowerCase();
        var binding = this.all_shortcuts[shortcut_combination];
        delete(this.all_shortcuts[shortcut_combination])
        if(!binding) return;
        var type = binding['event'];
        var ele = binding['target'];
        var callback = binding['callback'];

        if(ele.detachEvent) ele.detachEvent('on'+type, callback);
        else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
        else ele['on'+type] = false;
    }
}
Avatar billede lone_a_p Praktikant
01. juli 2008 - 10:14 #5
Det var der - som sagt giver det fejl i IE men ikke i Firefox.
Avatar billede lone_a_p Praktikant
01. juli 2008 - 10:24 #6
UPS! - eller også havde jeg helt glemt at overføre scriptet til webhotellet, det spurgte vist ikke om jeg ville overskrive, og nu virker det.

Har kun ændret et enkelt semikolon:
var ele = opt.target    ----->    var ele = opt.target;

Og nu virker det :-O

Tak for hjælpen, du fik mig ind på sporet :)
Avatar billede lone_a_p Praktikant
01. juli 2008 - 10:25 #7
smid bare et svar, nu har du kigget på det ;)
Avatar billede pidgeot Nybegynder
01. juli 2008 - 10:30 #8
Det har jeg nu egentlig ikke, du fandt svaret inden da - så igen, tag pointene selv *-)

Lige til reference, så er semikolon ikke nødvendigt i JavaScript - et linjeskift kan bruges i stedet. Dermed ikke sagt at det ikke er pænere at have det der :)
Avatar billede lone_a_p Praktikant
01. juli 2008 - 10:51 #9
Ok, jeg kan nu bedst lide at have det med :)
Overensstemmelse er godt!

Tak for "hjælpen" ;)
Avatar billede roenving Novice
01. juli 2008 - 14:43 #10
-- og så er det rart, hvis man en dag har brug for at komprimere scriptet, for så kan semikolon jo ikke undværes !-)
Avatar billede olebole Juniormester
01. juli 2008 - 20:30 #11
<ole>

- og der _er_ faktisk en fejl i første linje, selvom ingen browser på markedet brokker sig over den. Der skal være mellemrum lige efter et kommentar-start-tegn.
    //Ikke sådan,
    // men sådan i stedet

    /** <- dette er også en fejl
    /* * <- sådan burde det se ud

Det er en ualmindelig almindelig fejl. Den er blevet yderst populær, og det er en, stort set alle moderne libraries er enige om at lave. Mode er nu en pudsig ting  =)

/mvh
</bole>
Avatar billede arne_v Ekspert
01. juli 2008 - 20:54 #12
olebole>

????

Har du en side henvisning i ECMA-262 til det ?
Avatar billede roenving Novice
02. juli 2008 - 16:46 #13
Tjah, kigger man i ECMAscript262-3.pdf (som kan downloades fra ECMAs hjemmeside !-) er der i definitioner i sektion 7.4 (s. 18-19) placeret mellemrum efter dobbeltkaraktererne, der starter kommentarer og også før slut-tingen på fler-linjers kommentarer ...

-- og da dokumentet bruger subscript opt til at gøre opmærksom på, at noget må udelades, tyder det kraftigt på, at ole zq har ret ...

-- men jeg havde heller ikke lagt mærke til en denne detalje !-)
Avatar billede pidgeot Nybegynder
02. juli 2008 - 17:29 #14
Spørgsmålet er vel så bare om det mellemrum er sat ind for at adskille de syntaktiske elementer fra hinanden, eller om det skal forstås bogstaveligt.
Avatar billede roenving Novice
02. juli 2008 - 17:52 #15
Jepz, og mellemrum bruges mange steder, hvor de kan udelades !-)
Avatar billede arne_v Ekspert
02. juli 2008 - 17:55 #16
Naturligvis skal det ikke forstaaes bogstaveligt.

Hvis man gaar ned til + operatoren, saa er der ogsaa mellemrum omkring den.

Og saa er der:

7.2 White Space
White space characters are used to improve source text readability and to separate tokens (indivisible
lexical units) from each other, but are otherwise insignificant. White space may occur between any two
tokens, and may occur within strings (where they are considered significant characters forming part of the
literal string value), but cannot appear within any other kind of token.
Avatar billede arne_v Ekspert
02. juli 2008 - 18:04 #17
Hvis man angive at der skulle vaere mellemrum ville man angive grammatikken med:

X SP Y

eller lignende
Avatar billede pidgeot Nybegynder
02. juli 2008 - 18:29 #18
Det ville jeg også mene, ja - men Ole lader jo åbenbart til at have opfattet det anderledes (hvorfor, ved jeg af gode grunde ikke).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester