JQuery TypeError - PullRequest
       21

JQuery TypeError

1 голос
/ 01 июня 2011

В jquery - что делает (d||"").split?

У меня есть веб-приложение jqtouch, которое выдает следующую ошибку из файла jquery:

TypeError: Result ofвыражение '(d || ""). split "[undefined] не является функцией.

Я пробовал разные версии jquery, но не радости.Это что-то важное, или я могу игнорировать это?

edit: Это часть функции, из которой он исходит.Я не совсем уверен, сколько здесь включить, но его строка 68 из jquery.min:

if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");

edit 2: Я думаю, что эта функция должна быть вызвана здесь из photoswipe.js:

// Set up the options 
    Code.PhotoSwipe.Current.setOptions(opts);


    // Tell PhotoSwipe about the photos
    Code.PhotoSwipe.Current.setImages(thumbEls);


    if (useEventDelegation){

        /*
         * Use event delegation rather than setting a click event on each 
         * thumb element.
         */
        containerEl.addEventListener('click', function(e){

            if (e.target === e.currentTarget){
                return;
            }

            e.preventDefault();

            var findNode = function(clickedEl, targetNodeName, stopAtEl){

                if (Util.isNothing(clickedEl) || Util.isNothing(targetNodeName) || Util.isNothing(stopAtEl)){
                    return null;
                }

                if (clickedEl.nodeName === targetNodeName){
                    return clickedEl;
                }

                if (clickedEl === stopAtEl){
                    return null;
                }

                return findNode(clickedEl.parentNode, targetNodeName, stopAtEl);
            };


            var clickedEl = findNode(e.target, thumbEls[0].nodeName, e.currentTarget);

            if (Util.isNothing(clickedEl)){
                return;
            }

            showPhotoSwipe(clickedEl);

        }, false);

    }
    else{

        // Add a click event handler on each element
        for (var i = 0; i < thumbEls.length; i++){

            var thumbEl = thumbEls[i];
            thumbEl.addEventListener('click', onClick, false);

        }

    }

    return thumbEls;

};
swipew

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Попробуйте этот код:

var d = "matter";
(d||"").split("a"); //array: ["m","tter"]

var a = false;
(a||"").split("a"); //empty string

var c = true;
(c||"").split("a"); //type error

the ||выражение - логическая проверка.Если левое значение истинно (приведено к логическому значению), то всегда возвращается с левым, но если ложно, возвращается с правым.

"left"|| false  == "left"
"left"||"right" == "left"
 false||"right" == "right"

, если d равно логическое ложное будет возвращено со значением "", а затем без ошибок, но если d - логическое значение true (логическое значение true - это все, что не является логическим значением false) , но не строкаэто может быть TypeError.Убедитесь, что d преобразован в строку с .toString()

true.split("r") будет ошибкой типа, поэтому вы должны использовать true.toString().split("r"), и это даст вам ["t","ue"]

Так что в общей форме (d||"").toString().split("r") никогда не будет ошибки типа


update

О, я вижу вашу проблему.Я мог бы помочь вам лучше, если вы предоставите какой-то источник.Кстати, убедитесь, что вы передаете правильный тип аргумента в вызываемую функцию.Я не знаю, какую функцию вы используете, но я уверен, что вы передаете что-то логическое или число вместо строки, и я думаю, что проблема в .css () не так ли?
http://api.jquery.com/ документацияjquery

0 голосов
/ 01 июня 2011

Пытается разбить строку на массив на основе регулярного выражения.

Вероятно, это должно быть что-то вроде: split (d || "");

Почему бы вам не отредактировать ваше сообщение, чтобы включить окружающий код?

...