Посилання на прив'язку HTML - href та onclick обидва?


93

Я хочу створити прив'язувальний тег, який виконує деякий JavaScript, а потім переходить туди, куди hrefйого брав. Виклик функції, яка виконує мій JavaScript, а потім встановлює window.locationабо top.locationдо hrefрозташування, для мене не працює.

Отже, уявіть, у мене на сторінці є елемент з ідентифікатором "Foo". Я хочу створити прив'язку, подібну до:

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a>

Коли натискається це, я хочу виконати runMyFunction, а потім перейти на сторінку #Foo(не викликати перезавантаження - використання top.locationпризведе до перезавантаження сторінки).

Пропозиції? Я радий використовувати jQuery, якщо він може тут допомогти ...


return true;це рішення, але ви також можете зателефонувати location.hash = '#Foo'. Це не перезавантажить сторінку.
shuangwhywhy

Відповіді:


130

Просто return trueзамість цього?

Повернене значення з onClickкоду визначає, чи обробляється властива на посилання дія, що натиснута, чи ні - повернення falseозначає, що воно не обробляється, але якщо ви повернетесь, trueбраузер продовжить обробляти його після повернення вашої функції та перейде до належного якір.


1
Що робити, якщо onclick нічого не повертає?
maciek

1
@maciek, тоді повернене значення вважається таким, undefinedяке для цих цілей вважається помилковим.
Бурштин

1
Раніше, коли б я використовував функцію js для запуску нової сторінки і ставив просто "#" для атрибута href, я повертав "-1", щоб запобігти дії за замовчуванням, як правило, це перехід браузера вгорі сторінки, або іноді я просто нічого не повертаю. Останнім часом мені довелося переглянути всі ці сторінки, як порадив @Amber ... спеціально повернути false, якщо я не хочу, щоб сторінка переходила.
Ренді

1
@Amber здається, що якщо onclick нічого не поверне, властива натиснута на посилання дія буде оброблена.
iplus26

Також не слід використовувати event.preventDefault () на обробнику подій кліку.
Рубен

36
<a href="#Foo" onclick="return runMyFunction();">Do it!</a>

і

function runMyFunction() {
  //code
  return true;
}

Таким чином у вас буде виконано функцію youf, і ви перейдете за посиланням, і ви перейдете за посиланням саме після успішного запуску вашої функції.


1
Здається, це не працює, якщо ваша функція повертає істину після відкладеного виклику функції?
DavidVdd

7

Якщо посилання має змінити місце розташування лише у випадку успішного запуску функції, тоді зробіть це onclick="return runMyFunction();" і у функції ви повернете true або false.

Якщо ви просто хочете запустити функцію, а потім дозволити тегу прив'язки виконувати свою роботу, просто видаліть return false оператор.

Як побічне зауваження, натомість вам слід скористатися обробником подій, оскільки вбудований JS - не дуже оптимальний спосіб робити щось.


0

Роблячи чисту структуру HTML, ви можете використовувати це.

//Jquery Code
$('a#link_1').click(function(e){
  e . preventDefault () ;
  var a = e . target ;
  window . open ( '_top' , a . getAttribute ('href') ) ;
});

//Normal Code
element = document . getElementById ( 'link_1' ) ;
element . onClick = function (e) {
  e . preventDefault () ;
  
  window . open ( '_top' , element . getAttribute ('href') ) ;
} ;
<a href="#Foo" id="link_1">Do it!</a>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.