Вы пытаетесь назначить функцию своей ссылке двумя различными и противоречивыми способами.
Использование строки функции eval-ed, onclick = "function(value)"
, работает, но не рекомендуется.
Другой способ привязки обработчика щелчка в событии onload
также работает, но если вы хотите, чтобы было передано определенное значение, вам придется немного изменить свой сценарий, потому что значение задано в начальном onclick
полностью теряется при установке onclick
на новую функцию.
Чтобы ваш текущий метод работал, вам вообще не нужен обработчик onload
. Вам просто нужно это:
function deleteHike(hike_id) {
// Some code here
}
Чтобы сделать это вторым способом, который я рекомендую, он будет выглядеть так:
<a id="mylink" href="javascript:void(0);">Yes</a>
с этим сценарием:
function deleteHike(e, hike_id) {
// Some code here
// e refers to the event object which you can do nifty things with like
// - learn the actual clicked element if it was a parent or child of the `this` element
// - stop the event from bubbling up to parent items
// - stop the event from being captured by child items
// (I may have these last two switched)
}
function getCall(fn, param) {
return function(e) {
e = e || window.event;
e.preventDefault(); // this might let you use real URLs instead of void(0)
fn(e, param);
};
}
window.onload = function() {
var a = document.getElementById("mylink");
a.onclick = getCall(deleteHike, 3);
};
Параметром функции события DOM является объект события (в Firefox и других совместимых со стандартами браузерах). В IE ничего нет (поэтому нужно также захватывать window.event). Я добавил небольшую вспомогательную функцию, которая создает замыкание вокруг значения вашего параметра. Вы могли бы делать это каждый раз самостоятельно, но это было бы больно. Важной частью является то, что getCall - это функция, которая возвращает функцию , и именно эта возвращаемая функция вызывается при нажатии на элемент.
Наконец, я настоятельно рекомендую вместо всего этого использовать библиотеку, такую как jQuery , потому что она решает все виды проблем для вас, и вам не нужно знать сумасшедший JavaScript, который требует большого опыта чтобы правильно понять, проблемы, такие как:
- Наличие нескольких обработчиков для одного события
- Запуск JavaScript как можно скорее, прежде чем событие
onload
сработает с имитированным событием ready
. Например, возможно, изображение все еще загружается, но вы хотите сделать акцент на элементе управления, прежде чем пользователь попытается использовать страницу, вы не можете сделать это с onload
, и это действительно трудно проблему решить кросс-браузерной.
- Работа с тем, как передается объект события
- Выяснение всех различных способов, с помощью которых браузеры обрабатывают такие вещи, как распространение событий, получение выбранного элемента и т. Д.
Примечание: в вашем обработчике кликов вы можете просто использовать событие this
, которое будет содержать элемент clicked. Это может быть очень мощным для вас, потому что вместо того, чтобы кодировать, какой элемент был в JavaScript для события onclick
каждого элемента, вы можете просто привязать один и тот же обработчик ко всем вашим элементам и получить его значение из элемента. Это лучше, поскольку позволяет кодировать информацию об элементе только в элементе, а не в элементе и JavaScript.