JavaScript OnClick возвращает ошибку Объект не является функцией - PullRequest
0 голосов
/ 03 октября 2011

У меня есть функция, при которой при нажатии на элемент он становится выбранным элементом в объекте.Позвольте мне показать вам.

var elem = new Object();
elem = {
    title:'',//string
    num:null,//number
    selected:null
}
function selected(elem){
    elem.title = elem.getAttribute("title") || this['title'];
    alert(elem.title);
    for(x=0;x<classIds.length;x++){
        if(elem.title==classIds[x].name){
            elem.num=x; 
            elem.selected=classIds[x];
            alert(elem.selected.properties);
        }
    }
}

Итак, когда элемент щелкается, выбранная функция запускается из onlick атрибута элемента.Что круто.Работает нормально.Но, если вы щелкнете по нему еще раз, браузер выдаст ошибку «Объект не является функцией».Это происходит только при последовательном нажатии одного и того же элемента.Если вы нажмете на другой элемент, это не произойдет.Что странно, потому что функция должна запускаться отдельно и перезаписывать элемент Object (который определяется вне функции как глобальная переменная / объект).У меня есть предупреждение по причинам отладки.Кроме того, массив classIds также определен вне функции.Любое понимание было бы здорово.Кроме того, я знаю, что мое кодирование немного странно, я действительно только начинаю с Объектов и Методов в JavaScript.

Редактировать

Onclick вызывается следующим образом

<li title="+classIds[x].name+" onclick='selected(this)'>"+classIds[x].name+"</li>

Итак ...

onclick='selected(this)'

Это вызов

1 Ответ

1 голос
/ 03 октября 2011

В вашем коде есть одна действительно очевидная проблема: вы объявляете глобальную переменную (вне вашей функции) с именем elem, а затем ваша функция имеет параметр, также называемый elem.Таким образом, каждая ссылка на elem внутри функции будет относиться к параметру, а не к глобальному.Учитывая, как вы вызываете функцию, параметр ссылается на ваш элемент <li>, поэтому это означает, что функция в настоящее время перезаписывает и / или создает свойства для этого элемента.

Если вы измените имя параметра, наскажем clickedElem тогда внутри функции вы можете использовать elem, когда вы имеете в виду глобальную переменную, и clickedElem, когда вы имеете в виду параметр.

Помимо этого, я не совсем уверен, что вы пытаетесьдобиться, поэтому я не знаю, что еще посоветовать.

(И, как я уже говорил в комментарии выше, нет смысла инициализировать elem = new Object(), потому что на следующей строке вы сразу назначаете его равнымчто-то еще. Но это не доставит вам проблем, это просто бессмысленно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...