Почему это значение 'href' не работает в Opera? - PullRequest
2 голосов
/ 19 февраля 2011

У меня есть следующее:

<a href="javascript:jQuery('body').css('backgroundColor','red');">Test</a>

При работе в Chrome он работает как положено и переворачивает страницу красным цветом.Однако в Opera я получаю:

[объект объекта]

При ближайшем рассмотрении Opera обнаруживает, что javascript:Query('body')... является своего рода URL.Что я делаю неправильно?Разве Opera не распознает javascript: ссылки в атрибуте href?

jsFiddle: http://jsfiddle.net/9CZZL/


Редактировать: , похоже, проблема Firefoxтоже ...

Ответы [ 4 ]

6 голосов
/ 19 февраля 2011

Проблема в том, что возвращаемое значение jQuery('body').css('backgroundColor','red') является объектом, который некоторые браузеры интерпретируют как новый контент для веб-страницы.Чтобы это исправить, вы можете использовать оператор JavaScript void, чтобы превратить его в undefined, который FF и Opera (и, возможно, другие) будут обрабатывать так, как вы планировали.Вы заметите, что эта проблема также описана на этой странице, поскольку это главный вариант использования оператора void (кроме кода гольфа, где void 0 меньше символов, чем undefined).

<a href="javascript:void(jQuery('body').css('backgroundColor','red'));">Test</a>

Это должно дать ожидаемый результат: http://jsfiddle.net/9CZZL/13/

Следует отметить, что обработка кликов таким способом считается плохой практикой.Вместо этого рекомендуется использовать обработчики событий в JavaScript.Это помогает разделить различные слои вашего веб-приложения, что, в свою очередь, облегчит отладку в будущем.

1 голос
/ 19 февраля 2011

Делает ли это в Firefox тоже .... не совсем уверен, почему.Но мне никогда не нравилось помещать JavaScript прямо в URL ... вы можете попробовать вставить его в событие onclick или вытащить все это и отделить его:

http://jsfiddle.net/mnbayazit/6d5An/

1 голос
/ 19 февраля 2011

Все это работает как значения href для меня в Opera 10.1:

javascript:void(0)
javascript:alert("Hello")
javascript:window.location.href = 'http://www.google.com'

Хотя ваш фрагмент этого не делает.

Возможен обходной путь:

<a href="#" onclick="$('body').css('background-color','red')">Test</a>

Или даже:

<a href="javascript:void(0)" onclick="$('body').css('background-color','red')">Test</a>

... так как это похоже на работу.

1 голос
/ 19 февраля 2011

Я только что сделал поиск в Google, и нет, по-видимому, Opera не распознает значения "javascript:" href. Вам придется реализовать onClick или аналогичное решение.

...