Pergunta

Um nicho muito problema:

Eu às vezes (30% do tempo) obter um 'indefinido manipulador de' erro de javascript na linha 3877 do prototype.js biblioteca (versão 1.6.0.2 do google: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

Agora nesta página eu tenho um Mapa do Google e eu uso o Protótipo de Janela biblioteca.

O problema ocorre no IE7 e FF3.

Esta é a informação que o FireBug dá:

handler is undefined
? in prototype.js@3871()prototype.js (line 3877)
handler.call(element, event);

Eu mudei para uma versão local do prototypejs e acrescentou um pouco de depuração no método incorreto (createWraper), mas a depuração nunca aparece antes do erro...

Eu pesquisei em volta e encontrou 1 menção de que o erro na mesma linha, mas nenhuma resposta, então eu estou postando aqui, onde talvez, algum dia alguém vai ter uma resposta :).

Foi útil?

Solução

Eu só descobri este erro também ocorre se você acidentalmente deixar no parêntese no seu observador chamada:

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp());

em vez de

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);

Outras dicas

Isso provavelmente causará um erro:

Event.observe(myElement, 'click', myFunction(myParameters));

Você deve fazer como esta, em vez disso:

Event.observe(myElement, 'click', function() { myFunction(myParameters) });

Eu mudei para uma versão local do prototypejs e acrescentou um pouco de depuração no método incorreto (createWraper), mas a depuração nunca aparece antes de o erro...

Na verdade, a ofender a função a ser chamada quando ocorre o erro é "wrapper" que é criado dentro createWrapper (mas não ligou para lá).Basicamente, o que está acontecendo é que você já anexado de uma função como o manipulador de eventos para um elemento, e a função, na verdade, não existe.

Se você está tentando colocar qualquer informação de depuração para tentar identificar qual a função de "não existir", em seguida, adicionar as mensagens de alerta ou firebug saída do console dentro da função de wrapper entre linhas 3871 e 3878.

Realmente uma solução simples para "indefinido manipulador" de prototype.js erro no Protótipo é apenas...correcção protótipo.Achei conselhos aqui: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object e é realmente funcionando.

Basta encontrar a linha com:handler.call(element, event); e substituir com if (handler) handler.call(element, event) problema resolvido com o protótipo 1.6.0.3 e mais recente :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top