2014-09-04 2 views
1

Я пишу UserScript, все работает нормально до сих пор, только когда я нажимаю кнопку Я применил атрибут onClick, консоль продолжает сообщать мне Uncaught ReferenceError: SB_Change is not defined и функция SB_Change(what) не будет выполнена.Uncaught ReferenceError: <my usercript-defined function> не определен

Код:

window.addEventListener('load', function() { 
    var but1 = document.createElement("BUTTON"); 
    var t1=document.createTextNode(" + "); 
    but1.style.width = "16px"; 
    but1.style.height = "16px"; 
    but1.appendChild(t1); 
    but1.setAttribute('onclick','SB_Change("+")'); 
    // - 
    var but2 = document.createElement("BUTTON"); 
    var t2=document.createTextNode(" - "); 
    but2.appendChild(t2); 
    but2.style.width = "16px"; 
    but2.style.height = "16px"; 
    but2.setAttribute('onclick','SB_Change("-")'); 
    // - 
    var SB_text = document.getElementById("shoutbox").getElementsByTagName("h3")[0]; 
    SB_text.innerHTML = "Shoutbox "; 
    SB_text.appendChild(but1); 
    SB_text.appendChild(but2); 

    function SB_Change(type){ 
     var H = document.getElementById("sbPosts").maxHeight; 
     switch(type){ 
      case "+": 
       H = "800px"; 
       break; 
      case "-": 
       H = "400px"; 
       break; 
     } 
    } 
}, false); 

ответ

1

две проблемы:

  1. Функция SB_Change определена внутри нагрузки области видимости функции. Когда вы нажмете ссылку, эта область больше не существует.
    Переместить определение вне обработчика нагрузки, например, так:

    window.addEventListener ('load', function() { 
        ... ... 
    }, false); 
    
    function SB_Change (type){ 
        ... ... 
    } 
    
  2. В противном случае, этот вопрос является дубликатом Uncaught ReferenceError: function is not defined with onclick.
    Пользовательские сценарии изолированы песочницей, если вы не намеренно вводите код или (b) используете режим @grant none для тех двигателей, которые его поддерживают. (Ни один из этих режимов не рекомендуется, если не требуется абсолютно, что необходимо.)

    Не используйте onclick (¡ever!). См. Дублированный вопрос.

+0

Спасибо, мне понравилось, что вы сказали, но это не работает. Может быть, потому что моя функция получила аргумент? Anyways heres мне новый код: http://pastebin.com/LQmn1NEr Это не говорит мне, что «SB_Change не определено ..:» больше, когда я нажимаю на кнопку, она просто ничего не делает и когда я вхожу в SB_Change («+ ") в консоли, чем указано, что SB_Change не определен – PoTTii

+0

Этот новый код неправильно использует' addEventListener'. Кроме того, вы не можете использовать функции userscript с консоли. Но в этом случае вы могли бы определить его как: 'window.SB_Change = function (type) {'. ... В любом случае, вам нужно открыть новый вопрос для этих новых проблем. –

 Смежные вопросы

  • Нет связанных вопросов^_^