2015-10-10 1 views
1

Я пытаюсь добавить preventDefault() для функции, как показано ниже:предотвратить по умолчанию не работает функция

HTML:

<a href="#" id="makePaid" onclick="makePaidModalView(1, evnt)">Make Paid</a> 

Javascript:

function makePaidModalView(id, e) { 
    e.preventDefault(); 
    alert(id); 
} 

Но он ничего не предупреждая , Консоль говорит ReferenceError: e is not defined. Как добавить preventDefault() в эту функцию?

FIDDLE HERE

+0

Мне нужно передать 'id' в этой функции – Nitish

ответ

3
  1. Используйте No wrap вариант из Jsfiddle левой панели, выбрав эту опцию, сделает функцию makePaidModalView глобальной, в противном случае он будет обернут в load или DOMContentLoded обратном вызове и не может быть доступен из HTML.
  2. Использовать event как имя параметра события из обработчика события. Поскольку evnt не определен, undefined будет передан функции, и при попытке доступа к методу будет вызвана ошибка при вызове метода undefined.
  3. Лучше не использовать встроенные события. Используйте addEventListener для привязки событий к элементу из Javascript.
  4. Если у вас загружен jQuery на странице, вы можете использовать метод jQuery on для привязки событий.
  5. Используйте data-* пользовательские атрибуты для хранения данных, связанных с элементом самого элемента. Вы можете получить доступ к этому из JS, используя data('dataName').

Updated Fiddle

function makePaidModalView(id, e) { 
 
    e.preventDefault(); 
 
    //console.log(id) 
 
    alert(id); 
 
}
<a href="#" id="makePaid" onclick="makePaidModalView(1, event)">Make Paid</a>


Использование JQuery on с data-* пользовательских атрибутов для хранения данных на элементе.

$(document).ready(function() { 
 
    $('#makePaid').on('click', function(e) { 
 
    alert($(this).data('id')); 
 
    e.preventDefault(); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 
<a href="#" id="makePaid" data-id="1">Make Paid</a>

Sidenote: Вы также можете использовать return false; из обработчика события, когда с помощью JQuery, чтобы предотвратить действие элемента по умолчанию, а также остановить событие от бурлит в DOM.

+0

работает :) спасибо – Nitish

+0

Чтобы узнать больше о jsfiddle варианты см нижнюю часть HTTP: // StackOverflow.com/a/32925927/2025923 – Tushar

2

Вы можете использовать addEventListener() для привязки функции к определенному событию. Что-то вроде

document.getElementById('makePaid').addEventListener('click', function(event) { 
 
    makePaidModalView(this.dataset.id, event); 
 
}); 
 

 
function makePaidModalView(id, e) { 
 
    e.preventDefault(); 
 
    alert(id); 
 
}
<a href="#" id="makePaid" data-id=1>Make Paid</a>

+1

Параметр '1' здесь жестко закодирован/статичен, чтобы сделать его более динамичным/гибким, используя атрибут' data- * 'для хранения идентификатора на элементе, проверьте второй фрагмент кода в моем примере для ссылки о том, как использовать атрибут 'data- *' – Tushar

+0

Да, мы можем это сделать, обновили ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^