Почему вызов этой функции JQuery не работает в Firefox?
У меня есть следующая строка кода в ссылке на моей веб-странице:
<a href="javascript:$('#comment_form').toggle('normal')" title="Comment on this post">
Это создает ссылку, которая должна открывать скрытую форму. Он работает на Safari, но в Firefox я просто получаю почти пустую страницу с только текстом:
[object Object]
Я уверен, что это имеет какое-то отношение к значению, возвращаемому функцией JQuery, но я не уверен, как исправить вызов функции JavaScript, поэтому он также работает в Firefox.
Ответы
Ответ 1
За любовь...
<script type='text/javascript'>
jQuery(function($){ # Document ready, access $ as jQuery in this scope
$("a#comment").click(function(){ # bind a click event on the A like with ID='comment'
$('#comment_form').toggleClass('normal'); # Toggle the class on the ID comment form
return false; # stop the href from being followed.
});
});
</script>
....
<a id="comment" href="/you_need_javascript_sorry.html" title="Comment on this post">
[Comment]
</a>
Пожалуйста, не вставляйте JavaScript, как вы это делали в HTML.
Если вы встроили JavaScript в HTML, вы:
- Сделать грязный код.
- Есть странные проблемы, как вы делали с хаками, чтобы обойти его.
- Пользователи, пытающиеся связаться со средним кликом, будут отправлены нигде.
- Поддержание исполняемой части вашего кода, перемежающейся в ссылках на страницы, закончится неудачей.
- Не грациозно деградировать, если у пользователей нет javascript
- Станьте проблематичным, когда начинаешь делать что-то вроде складских котировок более чем на 2 слоя.
Ответ 2
Try:
<a href="javascript:void($('#comment_form').toggle('normal'))" title="Comment on this post">
Содержащий script внутри a void()
подавляет браузер от отображения результата выполнения.
Обновление
Я прямо ответил на исходный вопрос, с решением, которое потребует меньше усилий. Как уже упоминалось в некоторых других ответах, я лично сохранил разметку и JavaScript отдельно и динамически добавлял обработчик onclick
вместо того, чтобы встраивать script в атрибут href
.
Ответ 3
Вы пытались переместить то, что в href на onclick? В общем, вы должны избегать javascript в атрибуте href.
Ответ 4
<a href="#" onclick="location.href='http://full-url-to-directory/page#comment_form'; return false;"
onclick="$('#comment_form').toggle('normal');return false;"
title="Comment on this post">
Хотя вам нужно будет что-то сделать на сервере, чтобы, когда вы получаете ссылку на элемент comment_form по запросу, по умолчанию это будет видно. Это позволит (эта часть) вашей страницы работать без включенного javascript.