Почему вызов этой функции jQuery терпит неудачу в Firefox? - PullRequest
5 голосов
/ 12 января 2009

У меня есть следующая строка кода в ссылке на моей веб-странице:

<a href="javascript:$('#comment_form').toggle('normal')" title="Comment on this post">

Создает ссылку, которая должна открывать скрытую форму. Он работает в Safari, но в Firefox я просто получаю почти пустую страницу, на которой ничего нет, кроме следующего текста:

[object Object]

Я уверен, что это как-то связано со значением, возвращаемым функцией jQuery, но я не уверен, как исправить вызов функции JavaScript, чтобы она работала и в Firefox.

Ответы [ 4 ]

21 голосов
/ 12 января 2009

Ради любви ...

<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, вы:

  1. Сделай грязный код.
  2. Странные проблемы, как вы только что сделали с хакерами, чтобы обойти это
  3. Пользователи, пытающиеся перейти по ссылкам среднего уровня, никуда не отправятся.
  4. Сохранение исполняемой части вашего кода, вкрапленной в ссылки на страницы, приведет к сбою.
  5. Не грациозно ухудшаться, если у пользователя нет JavaScript
  6. Возникают проблемы, когда вы начинаете нуждаться в таких вещах, как хранить цитаты глубиной более 2 слоев
4 голосов
/ 12 января 2009

Попробуйте:

<a href="javascript:void($('#comment_form').toggle('normal'))" title="Comment on this post">

Содержащий скрипт внутри void() не позволит браузеру отображать результат выполнения.


Обновление

Я прямо ответил на исходный вопрос, решение которого потребовало бы наименьшего количества усилий. Как упоминалось в некоторых других ответах здесь, я лично разделил бы свою разметку и JavaScript и динамически добавил бы обработчик onclick вместо встраивания сценария в атрибут href.

2 голосов
/ 12 января 2009

Пытался переместить то, что находится в href, на нажатие. В общем, вам следует избегать JavaScript-кода в атрибуте href.

0 голосов
/ 12 января 2009

Использование:

<a href="http://full-url-to-directory/page#comment_form"
   onclick="$('#comment_form').toggle('normal');return false;"
   title="Comment on this post">

Несмотря на то, что вам нужно будет что-то сделать на сервере, чтобы при получении ссылки на элемент comment_form через запрос по умолчанию он был видимым. Это позволит (этой части) вашей странице работать без включенного JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...