Як використовувати посилання для виклику JavaScript?


Відповіді:


192
<a onclick="jsfunction()" href="#">

або

<a onclick="jsfunction()" href="javascript:void(0);">

Редагувати:

Наведена відповідь насправді не є вдалим рішенням, дізнавшись багато про JS з моменту, коли я спочатку розмістив повідомлення. Дивіться відповідь EndangeredMassa нижче для кращого підходу до вирішення цієї проблеми.


11
Я рекомендую другий, оскільки перший прокручує вас вгору сторінки.
Метт Гранде

7
Так, безумовно, якщо ви не додасте "return false;" після вашої функції.
Челсі

26
Це код 1998 року. Скористайтеся одним із ненав’язливих рішень. Будь ласка.
Ендрю Хеджес

7
Не використовуйте жодного! Посилання призначені для посилання, вони не є фіктивними елементами для виклику javascript.
I.devries

4
якщо ваш збирається поставити Javascript рядний зробити це в такий спосіб: <a onclick="jsfunction;return false" href="linkasnormal">
Вогонь Crow

201

Ненав'язливий JavaScript, відсутність бібліотечної залежності:

<html>
<head>
    <script type="text/javascript">

        // Wait for the page to load first
        window.onload = function() {

          //Get a reference to the link on the page
          // with an id of "mylink"
          var a = document.getElementById("mylink");

          //Set code to run when the link is clicked
          // by assigning a function to "onclick"
          a.onclick = function() {

            // Your code here...

            //If you don't want the link to actually 
            // redirect the browser to another page,
            // "google.com" in our example here, then
            // return false at the end of this block.
            // Note that this also prevents event bubbling,
            // which is probably what we want here, but won't 
            // always be the case.
            return false;
          }
        }
    </script>
</head>
<body>
    <a id="mylink" href="http://www.google.com">linky</a>        
</body>
</html>

26
Чи можете ви пояснити, чому це краще, ніж прийнята на даний момент відповідь, і де сценарій повинен розміщуватися на сторінці (адже це досить очевидно питання початкового рівня)?
Білл Ящірка

8
Звісна річ. Оновлено.
EndangeredMassa

6
Отже, що я hrefможу зробити, якщо я не хочу перенаправляти користувача та просто хочу запустити якийсь код? Змінити: Я бачу , що він може бути залишений порожнім: href="".
SabreWolfy

6
Чому краще додати onclickподію через window.onload, а не ставити onclickбезпосередньо в <a>тег?
Натан Рід

10
Що робити, якщо одна з ваших проблем полягає в тому, що ви не хочете розділяти свою функціональну одиницю роботи на різні фізичні місця у вихідному файлі або розповсюджуватись на багато вихідних файлів. Якщо ви помістите виклик javascript у свій тег href, це болісно зрозуміло, подивившись на один рядок, що відбувається. Мені б занепокоєння розділити цю функціональність на різні фізичні місця, де важче скласти уявлення про те, що відбувається. Можливо, це лише мій стиль.
Ст

47
<a href="javascript:alert('Hello!');">Clicky</a>

EDIT, років потому: НІ! Ніколи цього не роби! Я був молодим і дурним!

Ще раз редагуйте: пару людей запитали, чому ви не повинні цього робити. Є кілька причин:

  1. Презентація: HTML повинен орієнтуватися на презентацію. Поміщення JS в HREF означає, що ваш HTML зараз начебто має справу з бізнес-логікою.

  2. Безпека: Javascript у вашому HTML, наприклад, порушує політику безпеки вмісту (CSP) . Політика безпеки вмісту (CSP) - це додатковий рівень безпеки, який допомагає виявляти та пом’якшувати певні типи атак, включаючи міжсайтові сценарії (XSS) та атаки введення даних. Ці атаки використовуються для всього, починаючи від крадіжки даних до деграментування сайту чи розповсюдження зловмисного програмного забезпечення. Детальніше читайте тут .

  3. Доступність: Теги прив’язки призначені для посилання на інші документи / сторінки / ресурси. Якщо ваше посилання нікуди не йде, це має бути кнопка . Це набагато полегшує читачам екрану, терміналам шрифту шрифту тощо, щоб визначити, що відбувається, і надати користувачам з вадами зору корисну інформацію.


16
Можливо, якийсь опис проблем із цим методом? Це гірше, ніж href='#'і alert()в onclick?
Thomas Ahle

3
Я новачок у JavaScript і не розумію, що з цим погано. Будь-яке пояснення було б добре
nilanjanaLodh

1
Привіт, я також не впевнений, чому б не використати це? Я застряг у сценарії, коли мені потрібно викликати функцію JS, але все, що я можу вказати, - це посилання. І ваше рішення спрацювало.
skapie19

43

І чому б не ненав'язливий jQuery:

  $(function() {
    $("#unobtrusive").click(function(e) {
      e.preventDefault(); // if desired...
      // other methods to call...
    });
  });

HTML

<a id="unobtrusive" href="http://jquery.com">jquery</a>

2
Чи буде ця робота для SEO такою, що сканери знайдуть посилання та перейдуть за ним?
Ahi Tuna

11
тому що не всі використовують jquery.
Ст

1
@GregMiernicki Так і ні, залежно від того, що ви розумієте під посиланням. Подивіться на HTML. Веб-сканер або будь-який клієнт із вимкненим javascript відвідає даний HREF. Клієнти, що підтримують Javascript, запускають дію натискання, а потім переходять за посиланням, якщо ця функція не повертає помилкове значення або не викликає попередження за замовчуванням. У цьому випадку href - це резервний запас, тому його називають "ненав'язливим"
Еван Ланглуа

12

Ненав'язливий Javascript має безліч переваг, ось які кроки виконуються і чому його добре використовувати.

  1. посилання завантажується як звичайне:

    <a id="DaLink" href="http://host/toAnewPage.html"> натисніть тут </a>

це важливо, тому що він буде працювати для браузерів, у яких не ввімкнено javascript, або якщо в коді javascript є помилка, яка не працює.

  1. javascript працює при завантаженні сторінки:

     window.onload = function(){
            document.getElementById("DaLink").onclick = function(){
                   if(funcitonToCall()){
                       // most important step in this whole process
                       return false;
                   }
            }
     }
  2. якщо javascript працює успішно, можливо, завантаження вмісту на поточну сторінку за допомогою javascript, повернення false не скасовує запуск посилання. іншими словами, встановлення false false призводить до відключення посилання, якщо javascript запускається успішно. Дозволяючи запускати його, якщо JavaScript не робить, створюючи гарну резервну копію, щоб ваш вміст відображався в будь-якому випадку, для пошукових систем і якщо ваш код порушується або переглядається в системі, яка не має JavaScript.

Найкраща книга на цю тему - "Дом Сценарій" Джеремі Кіта


9

Або якщо ви використовуєте PrototypeJS

<script type="text/javascript>
  Event.observe( $('thelink'), 'click', function(event) {
      //do stuff

      Event.stop(event);
  }
</script>

<a href="#" id="thelink">This is the link</a>

1
Мені подобається не встановлювати функції обробки подій в черзі.
Марк Бік

1
Це єдиний шлях. Будь ласка, проголосуйте рядкові відповіді. Це практика, для якої немає виправдань у ці дні.
Ендрю Хеджес

5
@Andrew: Будь ласка, залиште коментар разом із вашим нижнім записом, пояснивши, чому відповіді в рядку погані.
Білл Ящірка

8

Я думаю, ви можете використовувати onclickподію приблизно так:

<a onclick="jsFunction();">

0

заснований на використанні відповіді @mister_lucky за допомогою jquery:

$('#unobtrusive').on('click',function (e) {
    e.preventDefault(); //optional
    //some code
});

Код Html:

<a id="unobtrusive" href="http://jquery.com">jquery</a>

-2

просто використовуйте javascript: ---- sampleplale

javascript:var JFL_81371678974472 = new JotformFeedback({ formId: '81371678974472', base: 'https://form.jotform.me/', windowTitle: 'Photobook Series', background: '#e44c2a', fontColor: '#FFFFFF', type: 'false', height: 700, width: 500, openOnLoad: true })
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.