вызывать функцию javascript при щелчке по гиперссылке

Я динамически создаю гиперссылку в коде C # за файлом ASP.NET. Мне нужно вызвать функцию JavaScript при нажатии клиента. как мне это сделать?


person ErnieStings    schedule 12.08.2009    source источник
comment
возможный дубликат Как использовать ссылку для вызова Javascript?   -  person Trilarion    schedule 05.06.2014


Ответы (9)


Еще аккуратнее, вместо 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="").

person karim79    schedule 12.08.2009
comment
+1 На данный момент это единственный ненавязчивый ответ. +100, если бы мог. - person James; 12.08.2009
comment
@Lewis, да, в идеале теги ‹a› не использовались бы для чистых js-вызовов, но, к сожалению, старые браузеры не поддерживали: hover для элементов без ссылок. Поэтому ссылки часто использовались для запуска js-событий. - person Chris Van Opstal; 12.08.2009
comment
@ Крис - Я не уверен, что ты понял мою точку зрения, Крис. Я предлагаю вам не использовать ‹a href=#› Ничего не делать ‹/a›, а вместо этого использовать ‹a href=a/link/somwhere.html› Сделайте что-нибудь ‹/a›, а затем используйте прогрессивное улучшение для отмены href. Это самое чистое решение. Якоря в порядке, но они должны делать ЧТО-ТО, если javascript отключен - или по какой-то причине (согласно IE6) какой-то javascript сломался до того, как обработчик был создан и назначен. Таким образом, все ваши пользователи будут довольны. - person Lewis; 12.08.2009
comment
Не работает для меня, просто автоматически выполняет функцию onclick при загрузке страницы. Это также похоже на кошмар, когда речь идет о доступности. - person Shawn Solomon; 23.03.2012
comment
вы не должны использовать () только имя функции, в настоящее время я пытаюсь выяснить, как передать параметр функции, в противном случае я мог бы сначала вызвать функцию, которая устанавливает параметры глобально ... пока не знаю - person Wiston Coronell; 01.07.2014
comment
Это не работает, вы просто перенаправляетесь на URL-адрес href. - person paddotk; 14.10.2014
comment
@Coronellx Если вы хотите добавить параметры, вы всегда можете сделать: el.onclick = function() {return showFoo(param1, param2);};. Теперь onclick указывает на функцию, но вы все равно можете отправить желаемые параметры. - person Pphoenix; 10.09.2015
comment
Для тех, у кого это не сработало, попробуйте следующее: function showFoo(e) { e.preventDefault(); alert('I am foo!'); return false; } - person Shubham Kushwah; 02.09.2018

Самый простой ответ ...

<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>

person Jayden Lawson    schedule 11.09.2012
comment
Ссылка в StackOverflow «Выполнить фрагмент кода» не работает в Firefox (предупреждение не создается), но она работает в FF, когда я помещаю этот тип ссылки на обычную веб-страницу. - person the_pwner224; 09.05.2019
comment
Да, это странно, у меня это сработало, теперь - нет. У других были похожие проблемы, и, похоже, нет одного окончательного решения, кроме полной переустановки Firefox. - person Jayden Lawson; 17.09.2019

С параметром onclick ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>
person amischiefr    schedule 12.08.2009
comment
запутанное заявление. он собирается на google.com или вызывает функцию javascript? что имеет приоритет? - person Nguai al; 14.01.2020

Ответ 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>
person elcuco    schedule 12.08.2009
comment
JavaScript был изобретен для разработки jQuery? Это новый! - person palswim; 02.11.2010
comment
Это было похоже на чтение того, что Лего было изобретено, чтобы построить Лего Бэтмена. - person Shawn Solomon; 23.03.2012
comment
@ShawnSolomon Я рад, что мы согласны :) - person elcuco; 26.03.2012
comment
@elcuco, отличный сарказм! + 'd :) Да здравствует JQuery - person Zuul; 14.05.2012

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

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

Его также можно использовать для входных тегов, например.

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

person Marky    schedule 12.08.2009

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

Используйте подход, при котором у вас есть определенный идентификатор для каждого элемента (или класса, если его общая функциональность), а затем используйте Progressive Enhancement для добавления обработчиков событий, например:

[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, и у него будет четкое разделение проблем.

Надеюсь, что это будет полезно.

person Lewis    schedule 12.08.2009
comment
Почему С #? Почему не просто <a href="/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>? - person Mahmood Dehghan; 25.04.2013

Обычно я бы рекомендовал использовать element.attachEvent (IE) или element.addEventListener (другие браузеры) вместо установки события onclick напрямую, поскольку последнее заменит любые существующие обработчики событий для этого элемента.

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

person Simon    schedule 12.08.2009

Используйте onclick атрибут HTML.

Обработчик событий onclick фиксирует событие нажатия кнопки мыши пользователя на элементе, к которому применен атрибут onclick. Это действие обычно приводит к вызову метода сценария, такого как функция JavaScript [...]

person Donut    schedule 12.08.2009

Если вы не дождетесь загрузки страницы, вы не сможете выбрать элемент по идентификатору. Это решение должно работать для всех, у кого возникают проблемы с выполнением кода.

<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>
person user2197701    schedule 27.10.2017