Почему вызов этой функции 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.