IE 7 CTRL + щелчок открывает новое окно - как его подавить?

Можно ли подавить функциональность IE 7 по умолчанию, когда CTRL+щелчок по ссылке открывает новое окно? если да, то как?

Спасибо!


person sarsnake    schedule 22.04.2010    source источник
comment
Все, что я скажу, это то, что вам нужна очень веская причина для переопределения действий, которые, как ожидают пользователи, будут работать определенным образом.   -  person Dan Diplo    schedule 23.04.2010
comment
Это происходит в IE8; это также поведение по умолчанию в Firefox и Chrome — Shift-щелчок открывает новое окно, Ctrl-щелчок открывает новую вкладку. Наверное, так же и в других.   -  person GalacticCowboy    schedule 23.04.2010
comment
Вы должны быть более подробными в своем запросе. Ваша реальная проблема гораздо шире, чем эта.   -  person i_am_jorf    schedule 23.04.2010


Ответы (6)


Невозможно подавить Ctrl + щелчок по ссылке без дочерних элементов в Internet Explorer — событие onclick вообще не срабатывает для щелчков по ссылке, если Ctrl клавиша удерживается. Похоже, Microsoft не хочет, чтобы вы меняли эту функциональность, опасаясь, что вы можете запутать пользователя.

Я искал какое-то официальное подтверждение/объяснение перед публикацией этого ответа, но, к сожалению, это ограничение не указано в документации на MSDN, и Google не помог. Тем не менее, это остается правдой, попробуйте сами:

<a href="#" onclick="alert('Hello');">Hello</a>

Вы обнаружите, что Ctrl + щелчок по ссылке не приведет к появлению окна предупреждения. Согласно pinkgothic, назначение дочернего элемента ссылке решит проблему. Например:

<a href="#" onclick="alert('Hello');"><span>Hello</span></a>

Это работает, потому что щелчок сначала запускается для элемента <span>, а затем распространяется на элемент <a>.

person Andy E    schedule 22.04.2010
comment
да, я уже понял .... я пойду с нестандартным поведением для управления деревом и на этом закончу - person sarsnake; 23.04.2010
comment
Интересно, что <a href="http://stackoverflow.com" onclick="alert('Hello');"><span>Hello</span></a> с помощью ctrl+click работает нормально (по крайней мере, в IE9). По-видимому, это «только» имеет значение, откуда возникает событие. <span> достаточно, чтобы его скинуть. - person pinkgothic; 02.06.2012
comment
@pinkgothic: Звучит многообещающе, если работает и в старых версиях IE. - person Andy E; 02.06.2012
comment
Согласованный! К сожалению, у меня нет возможности это проверить; Я просто наткнулся на ваш ответ, пытаясь отладить сайт, который таинственным образом не работал с ctrl+кликом в IE :), и мне удалось это исправить (наш случай был простым display:none инициированным onclick), поэтому я решил поделиться мое исправление. Ваш ответ очень помог! ^_^ - person pinkgothic; 02.06.2012
comment
Трюк с элементом <span>, предложенный @pinkgothic, отлично работает. Спасибо за это! - person brotherli; 22.02.2014

Метод jQuery event.preventDefault() или аналогичный может переопределить поведение по умолчанию на ваших страницах. контроль над.

Как правило, изменение поведения браузера пользователя без веской причины является плохой практикой, поскольку браузер и его поведение принадлежат «их».

person msw    schedule 22.04.2010
comment
я планирую сделать для узлов в дереве. они доп. быть кликабельными, но не открывать ссылки. Я не собираюсь делать это для традиционных ссылок. - person sarsnake; 23.04.2010

была та же проблема, что и у оператора, и она была решена путем присвоения атрибуту href привязки «#» и дополнительного атрибута data-href с соответствующим расположением ссылки. Недостатком вам нужен обработчик кликов, чтобы перейти по ссылке, а также щелчок правой кнопкой мыши «открыть в новом окне» не будет работать с этим подходом.

eg: In AnchorTag, Use href and data-ref as:
<a id="logout" href="#" data-href="${yourPath}"> 

And in javascript, use    
$("#logout").click(function(e) {
    if(e.ctrlKey) 
e.preventDefault();
window.location = $(e.target).attr("data-href");
});
person huehnerfaust    schedule 21.10.2011

оберните текст ссылки внутри диапазона. так:

<a href="test.html"><span>click here!</span></a>
person hesam faraji    schedule 04.02.2014

Добавить скрипт в якорь и вернуть false

<a href='some.htm' onclick='return false;'></a>

И правильно использовать якоря в древовидном представлении, потому что это делает древовидное представление более доступным.

person James Westgate    schedule 22.04.2010

Используя jquery, вы можете обрабатывать функциональность ctrl+click для себя и возвращать false, например

$("a").click(function(event){
if(event.metaKey || event.ctrlKey){
 //handle over here 

return false;
}

});

это работает во всех браузерах, включая Mac

person Amareswar    schedule 16.05.2011