Каков наилучший способ заменить ссылки функциями JS?

13
задан Electrons_Ahoy 6 November 2008 в 05:57
поделиться

8 ответов

Незаметный Javascript

лучшая практика должна добавить методы обработчика событий для ссылок.

Эти подтверждают () , функция производит диалоговое окно, которое Вы описали и возвращаете TRUE или FALSE в зависимости от выбора пользователя.

Методы обработчика событий для ссылок имеют специальное поведение, которое является, что они уничтожают действие ссылки, если они возвращают false.

var link = document.getElementById('confirmToFollow');

link.onclick = function () {
    return confirm("Are you sure?");
};

, Если Вы хотите ссылку на [1 120], требуют javascript, HTML должен быть отредактирован. Удалите href:

<a href="#" id="confirmToFollow"...

можно явно установить место назначения ссылки в конечном счете обработчик:

var link = document.getElementById('confirmToFollow');

link.onclick = function () {
    if( confirm("Are you sure?") ) {
        window.location = "http://www.stackoverflow.com/";
    }
    return false;
};

, Если Вы хотите тот же метод, обратился к нескольким ссылкам, можно получить nodeList ссылок, которые Вы хотите и применяете метод к каждому, поскольку Вы циклично выполняетесь через nodeList:

var allLinks = document.getElementsByTagName('a');
for (var i=0; i < allLinks.length; i++) {
    allLinks[i].onclick = function () {
        return confirm("Are you sure?");
    };
}

существуют дальнейшие перестановки той же идеи здесь, такие как использование имени класса для определения, какие ссылки прислушаются к методу, и передать уникальное местоположение в каждого на основе некоторых других критериев. Они - шесть из один, полдюжины из другого.

Альтернативные Подходы (не поощренные методы):

Один препятствовавшая практика должна присоединить метод через атрибут onclick :

<a href="mypage.html" onclick="...

Другой препятствовавшая практика должна установить атрибут href к вызову функции:

<a href="javascript: confirmLink() ...

Примечание, что эти нежелательные методы все работают решения.

13
ответ дан keparo 6 November 2008 в 05:57
поделиться

Вот то, как мы делали его:

<a href="#" onClick="goThere(); return false;">Go to new page</a>`

function goThere() 
{ 
   if( confirm("Are you sure?") ) 
    { 
       window.location.href="newPage.aspx"; 
    } 
}

(РЕДАКТИРОВАНИЕ: Код, переформатированный для предотвращения горизонтальной прокрутки)

7
ответ дан James Curran 6 November 2008 в 05:57
поделиться
  • 1
    It' s, возможно, не очень полезный для заключения в кавычки древнего текста (2005) из древней версии спецификации (J2EE). OP конкретно попросил EE Java, который является современным дневным воплощением J2EE. – Arjan Tijms 4 September 2011 в 14:11
<a href="http://..." onclick="return confirm('are you sure?')">text</a>
3
ответ дан Diodeus - James MacFarlane 6 November 2008 в 05:57
поделиться

В jQuery это - что-то как:

$("a").click(function() {if(confirm('yadda yadda')) event.stopPropagation();});

, Если я понимаю то, что упомянул jgreep, если бы Вы только хотите, чтобы подтверждение появилось на нескольких ссылках, Вы связали бы обработчик щелчков только со ссылками с правильным классом. Вы могли сделать это только для привязок или для любого элемента HTML, который имеет класс.

$(".conf").click(function() {if(confirm('yadda yadda')) event.stopPropagation();});
2
ответ дан Josh 6 November 2008 в 05:57
поделиться

При использовании jQuery, Вы сделали бы:

jQuery(document).ready(
    jQuery("a").click(){
        //you'd place here your extra logic
        document.location.href = this.href;
    }
);
3
ответ дан Esteban Küber 6 November 2008 в 05:57
поделиться
  • 1
    Это имеет смысл от реализация ' s точка зрения, поскольку переоснова использует оборудование слияния с " ours" ответвление, являющееся восходящим ответвлением и " theirs" ответвление, являющееся перебазирующимся тем. Но я согласовываю it' s, ну, в общем, " чрезвычайно unhelpful" походит на вежливый способ поместить его. I' d очень скорее маркировали ответвления некоторыми другими словами, чем " us/ours" и " them/theirs" возможно, именем ответвления, например: " удаленный в ведущем устройстве, измененном в feature". – torek 9 January 2014 в 21:43

Связывающая класс версия (никакая потребность во встроенных атрибутах onclick): свяжите этот внешний < сценарий> после всех подтверждаемых средств управления:

// dangerous - warnings on potentially harmful actions
// usage: add class="dangerous" to <a>, <input> or <button>
// Optionally add custom confirmation message to title attribute

function dangerous_bind() {
    var lists= [
        document.getElementsByTagName('input'),
        document.getElementsByTagName('button'),
        document.getElementsByTagName('a')
    ];
    for (var listi= lists.length; listi-->0;) { var els= lists[listi];
        for (var eli= els.length; eli-->0;) { var el= els[eli];
            if (array_contains(el.className.split(' '), 'dangerous'))
                el.onclick= dangerous_click;
        }
    }
}

function array_contains(a, x) {
    for (var i= a.length; i-->0;)
        if (a[i]==x) return true;
    return false;
}

function dangerous_click() {
    return confirm(this.title || 'Are you sure?');
}

dangerous_bind();

Это - немного многоречивое должное к продолжающей работать привязке, отправляет/застегивает также. Обычно, хотя имеет смысл иметь опции ‘dangerous’, Вы захотите подтвердить на кнопках, а не ссылках. ДОБЕРИТЕСЬ запросы, как запущено ссылками не должны действительно иметь никакого активного эффекта.

1
ответ дан bobince 6 November 2008 в 05:57
поделиться
var links = document.getElementsByTagName('A');

for (var i = 0; i < links.length; i++)
{ 
    links[i].onclick = function ()
    {       
       return Confirm("Are you sure?");
    }
}

Это применяет сообщение ко всем ссылкам, однако немного более трудно заставить ссылки не работать без JavaScript автоматически (на самом деле его невозможное).

1
ответ дан FlySwat 6 November 2008 в 05:57
поделиться

Смотрите на What’s лучший способ открыть новое окно браузера . Можно сделать что-то подобное, но подбросить подтверждение до открытия нового окна.

1
ответ дан Community 6 November 2008 в 05:57
поделиться
  • 1
    таким образом, как Вам поворачивают .la файл к платформе определенный общий библиотечный файл, как libfoo.la-> libfoo.so.* – theactiveactor 31 December 2009 в 15:39
Другие вопросы по тегам:

Похожие вопросы: