2013-11-16 3 views
1

это, вероятно, глупо, но я очень новичок в JavaScript, и это заставляет меня сходить с ума.Функция не выполняется из onclick внутри html

Мой вопрос, почему это не работает: http://jsfiddle.net/Ye9tG/

<input type="button" id="butt" value="Button" onclick="getThought();"/> 

Он отлично работает, если я добавляю OnClick непосредственно в JavaScript:

document.getElementById("butt").onclick = getThought; 

Спасибо заранее.

+0

Здесь он работает сейчас: http://jsfiddle.net/sJ9pF/ Я добавил функцию в мертвый. – floww

+0

Смотрите этот ответ: http://stackoverflow.com/a/5468370/2926151, и этот ответ: http://stackoverflow.com/a/5830423/2926151 – Villarrealized

ответ

2

Функция getThoughts не определена, потому что ваш JavaScript настроен на выполнение onLoad. См. Раскрывающееся меню в левом верхнем углу jsFiddle. Выберите «No wrap - in <head>», чтобы устранить проблему: http://jsfiddle.net/Ye9tG/1/

Кроме того, всегда смотрите на консоль своего браузера, чтобы проверить наличие ошибок. В этом случае при нажатии кнопки вы увидите ошибку Uncaught ReferenceError: getThought is not defined.

+0

Спасибо, думал, что это будет что-то глупое. Даже не думал о возможности, если это jsFiddle, а не сам код. – user2999861

+0

@ user2999861: Нет проблем - с удовольствием помогите. Удачи с вашим проектом. –

2

В верхнем левом углу jsfiddle вы увидите, что ваша скрипка настроена на запуск js-кода «onLoad». То, что это действительно означает, что jsfiddle создает это для вас:

<script type='text/javascript'>//<![CDATA[ 
window.onload=function(){ 

// YOUR CODE HERE 

}//]]> 

</script> 

В результате, ваша функция доступна только в пределах этой onload функции. Измените значение на «no wrap head», и вы увидите, что оно работает.

Другой вариант должен был бы сделать вашу функцию явно глобальный:

window.getThought = function(){ 
    // ... 

http://jsfiddle.net/Ye9tG/5/

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