викликати функцію javascript при клацанні гіперпосилання


88

Я динамічно створюю гіперпосилання в коді c # за файлом ASP.NET. Мені потрібно викликати функцію JavaScript за кліком клієнта. як мені це досягти?


Відповіді:


133

Ще акуратніше, замість typical href="#"або href="javascript:void"або href="whatever", я думаю, це має набагато більше сенсу:

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a>

Якщо Javascript не вдається, є деякі відгуки. Крім того, усувається нестабільна поведінка (перехід на сторінку у випадку href="#", відвідування тієї самої сторінки у випадку href="").


13
+1 На даний момент це єдина ненав’язлива відповідь. +100 якби міг.
Джеймс,

@Lewis, так, в ідеалі теги <a> не використовуватимуться для чистих викликів js, але, на жаль, старі браузери не підтримували: наведення курсору на елементи, що не є посиланнями. Тому посилання часто використовувались для запуску js-подій.
Кріс Ван Опстал

@Chris - Я не впевнений, що ти зрозумів мою думку, Кріс. Я пропоную вам не використовувати <a href="#"> нічого не робити </a>, а використовувати <a href="a/link/somwhere.html"> робити щось </a>, а потім використовувати поступове вдосконалення, щоб замінити href. Це найчистіше рішення. З якорями все гаразд, але вони повинні зробити ЩО-небудь, якщо javascript відключений - або з якихось причин (згідно з IE6) якийсь javascript зламався до того, як був створений та призначений обробник. Таким чином, всі ваші користувачі задоволені.
Льюїс

2
Не працює у мене, просто автоматично виконує функцію onclick при завантаженні сторінки. Це також здається кошмаром, коли йдеться про доступність.
Шон Соломон,

4
Це не працює, воно просто спрямовує вас на URL-адресу href.
paddotk

58

Найпростіша відповідь із усіх - це ...

<a href="javascript:alert('You clicked!')">My link</a>

Або щоб відповісти на питання про виклик функції javascript:

<script type="text/javascript">
function myFunction(myMessage) {
    alert(myMessage);
}
</script>

<a href="javascript:myFunction('You clicked!')">My link</a>


2
Посилання в StackOverflow 'Запуск фрагмента коду' не працює у Firefox (попередження не створюється), але воно працює в FF, коли я розміщую цей тип посилання на звичайній веб-сторінці.
the_pwner224

Так, це дивно, це працювало для мене, зараз це не так. У інших були подібні проблеми, і, схоже, немає жодного остаточного рішення, окрім повної переінсталяції Firefox.
Джейден Лоусон,

26

За допомогою параметра onclick ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>

заплутане твердження. це буде google.com або виклик функції javascript? який має пріоритет?
Нгуай аль

12

Відповідь JQuery. Оскільки JavaScript був винайдений для розробки JQuery, я наводжу вам приклад у JQuery, який робить це:

<div class="menu">
    <a href="http://example.org">Example</a>
    <a href="http://foobar.com">Foobar.com</a>
</div>

<script>
jQuery( 'div.menu a' )
    .click(function() {
        do_the_click( this.href );
        return false;
    });

// play the funky music white boy
function do_the_click( url )
{
    alert( url );
}
</script>

53
JavaScript був винайдений для розробки jQuery? Це нове!
palswim

35
Це було як прочитати, що Lego було винайдено для побудови Lego Batman.
Шон Соломон,

5
@ShawnSolomon Я радий, що ми погоджуємось :)
elcuco

1
@elcuco, великий сарказм! + 'd :) Хай живе JQuery
Зуул

6

Я вважаю за краще використовувати метод onclick, а не href для гіперпосилань javascript. І завжди використовуйте попередження, щоб визначити, яке значення ви маєте.

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

Він також може використовуватися на вхідних тегах, наприклад.

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>


3

В ідеалі я б взагалі уникав генерування посилань у вашому коді, оскільки ваш код потребуватиме перекомпіляції кожного разу, коли ви захочете змінити "розмітку" кожного з цих посилань. Якщо вам доведеться це зробити, я б не вбудовував ваші "дзвінки" javascript у ваш HTML, це взагалі погана практика, ваша розмітка повинна описувати ваш документ, а не те, що він робить, це робота вашого javascript.

Використовуйте підхід, коли у вас є певний ідентифікатор для кожного елемента (або класу, якщо це загальна функціональність), а потім використовуйте Прогресивне вдосконалення, щоб додати обробники подій, приблизно так:

[c# example only probably not the way you're writing out your js]
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>");

[Javascript]  
document.getElementById('uxAncMyLink').onclick = function(e){

// do some stuff here

    return false;
    }

Таким чином, ваш код не зламається для користувачів з вимкненою JS, і він матиме чітке розділення проблем.

Сподіваюся, що це корисно.


1
Чому C #? Чому не просто <a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
Mahmoodvcs

2

Як правило, я б рекомендував використовувати element.attachEvent (IE) або element.addEventListener (інші браузери) над встановленням події onclick безпосередньо, оскільки останній замінить будь-які існуючі обробники подій для цього елемента.

attachEvent / addEventListening дозволяє створювати кілька обробників подій.


1

Використовуйте onclickатрибут HTML .

onclickОброблювач подій захоплює подія кліка від користувачів кнопки миші на елементі , до якого onclickзастосовується атрибут. Ця дія зазвичай призводить до виклику методу сценарію, такого як функція JavaScript [...]


1

Якщо ви не дочекаєтеся завантаження сторінки, ви не зможете вибрати елемент за ідентифікатором. Це рішення має працювати для тих, хто має проблеми з виконанням коду

<script type="text/javascript">
window.onload = function() {
    document.getElementById("delete").onclick = function() {myFunction()};

    function myFunction() {
        //your code goes here
        alert('Alert message here');
    }
};
</script>

<a href='#' id='delete'>Delete Document</a>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.