2012-02-24 2 views
1

Я имею яваскрипт кода для ссылки клика:Javascript из OnClick в функцию

document.getElementById('giddy').onclick = function { 
     alert(this.href); 
    }; 

, и я хочу, чтобы отделить функцию часть этого ... У меня есть

document.getElementById('giddy').onclick = poro(this); 
    function poro(yyyy) { 
     alert(yyyy.href); 
    }; 

Но не работает (говорит, что не указано в предупреждении) ... что я делаю неправильно?

+0

Вы не назначая обработчика OnClick событие к функции, вы вызываете функцию poro и передаете 'this', которая в этот момент * не * представляет собой объект гиперссылки. – asawyer

ответ

2

Вам не нужно проходить this в качестве параметра. this будет контекстом для функции при ее вызове. Вы должны иметь только:

document.getElementById('giddy').onclick = poro; 
function poro() { 
    alert(this.href); 
}; 
+0

Это работает? !!? как javascript знает, что poro является функцией, если у нее нет()? – David19801

+1

в JS, '()' выполняет функцию. Функции могут передаваться как переменные, ссылаясь на него без его '()'. – Mathletics

+0

Функция poro() {...} эквивалентна var poro = function() {...}, поэтому это работает. – Dave

0

Избавьтесь от (this) и используйте функцию this в функции вместо yyyy.

document.getElementById('giddy').onclick = poro; 
function poro() { 
    alert(this.href); 
}; 
0

Вы сразу же вызываете функцию poro. По сути, вы сообщаете Javascript, что значение элемента onclick будет равно результату вызова функции poro(this [window]).

Чтобы обойти эту проблему, вы можете обернуть функцию poro(this) внутри пустой функции, например, так:

document.getElementById('giddy').onclick = function(){poro(this)} function poro(yyyy) { alert(yyyy.href); }; 

Вы можете также рассмотреть возможность использования eventListener, так как это позволяет пространство для расширения.

0

Практически там! Вы должны сделать:

document.getElementById('giddy').onclick = function(){ poro(this); } 
function poro(yyyy) { 
    alert(yyyy.href); 
}; 

Примечания poro(this); завернутых в анонимной функции.

+0

Я всегда забываю, что они называются анонимными функциями ... не знаю почему. –

+2

Зачем вам создавать анонимную функцию?Это полностью игнорирует одно из основных преимуществ JavaScript (функции могут передаваться как переменные). – Mathletics

+0

Согласованное, лучшее решение. –

0

Я бы рекомендовал использовать addEventListener вместо метода onclick.

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

var giddy = document.getElementById('giddy'); 
giddy.addEventListener('click', function(e) { poro(this); }, false); 
function poro(yyyy) { 
    alert(yyyy.href); 
} 
+0

Почему addeventlistener и не onclick? это лучше? – David19801

+0

Пожалуйста, смотрите эту страницу для получения дополнительной информации: https://developer.mozilla.org/en/DOM/element.onclick «Только один обработчик onclick может быть привязан к объекту за раз с этим свойством. вместо этого использовать метод addEventListener, поскольку он более гибкий и является частью спецификации DOM Events ». –

0

, так как вы используете использование Jquery:

$('#giddy').click(function(){ poro($(this));}); 

или вы можете Используйте bind() функцию

$("#giddy").bind("click", $(this), poro); 
Смежные вопросы