Як тільки я звільнив evt.preventDefault()
, як я можу відновити дії за замовчуванням знову?
Як тільки я звільнив evt.preventDefault()
, як я можу відновити дії за замовчуванням знову?
Відповіді:
Згідно з коментарем @Prescott, протилежне:
evt.preventDefault();
Може бути:
По суті, що прирівнюється до "робити за замовчуванням" , оскільки ми більше не перешкоджаємо цьому.
Інакше я схильний вказати на відповіді, надані іншими коментарями та відповідями:
Як від’єднати слухача, який викликає event.preventDefault () (використовуючи jQuery)?
Як повторно ввімкнути event.preventDefault?
Зауважте, що другий був прийнятий із прикладом рішення, поданим redsquare (розміщений тут для прямого рішення у випадку, якщо це не закрито як дублікат):
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
Для обробки команди перед продовженням посилання з click
події в jQuery:
Наприклад: <a href="http://google.com/" class="myevent">Click me</a>
Запобігання та використання за допомогою jQuery:
$('a.myevent').click(function(event) {
event.preventDefault();
// Do my commands
if( myEventThingFirst() )
{
// then redirect to original location
window.location = this.href;
}
else
{
alert("Couldn't do my thing first");
}
});
Або просто бігти window.location = this.href;
заpreventDefault();
Мені довелося затримати подання форми в jQuery, щоб виконати асинхронний виклик. Ось спрощений код ...
$("$theform").submit(function(e) {
e.preventDefault();
var $this = $(this);
$.ajax('/path/to/script.php',
{
type: "POST",
data: { value: $("#input_control").val() }
}).done(function(response) {
$this.unbind('submit').submit();
});
});
event.preventDefault(); //or event.returnValue = false;
та його протилежність (стандарт):
event.returnValue = true;
джерело: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
Я б запропонував таку схему:
document.getElementById("foo").onsubmit = function(e) {
if (document.getElementById("test").value == "test") {
return true;
} else {
e.preventDefault();
}
}
<form id="foo">
<input id="test"/>
<input type="submit"/>
</form>
... якщо я чогось не пропускаю.
Не існує протилежного способу event.preventDefault()
зрозуміти, чому спочатку потрібно вивчити, що event.preventDefault()
робить, коли ти його називаєш.
Під кришкою функціональність для prevenDefault по суті викликає помилку повернення, яка зупиняє подальше виконання. Якщо ви знайомі зі старими способами Javascript, колись у моді було використовувати false false для скасування подій у таких речах, як подання форми та кнопки з використанням true true (до того, як jQuery був навіть навколо).
Як ви, напевно, вже працювали на підставі простого пояснення вище: навпаки - event.preventDefault()
це ніщо. Ви просто не перешкоджаєте події, за замовчуванням браузер дозволить подію, якщо ви не заважаєте їй.
Пояснення див. Нижче:
;(function($, window, document, undefined)) {
$(function() {
// By default deny the submit
var allowSubmit = false;
$("#someform").on("submit", function(event) {
if (!allowSubmit) {
event.preventDefault();
// Your code logic in here (maybe form validation or something)
// Then you set allowSubmit to true so this code is bypassed
allowSubmit = true;
}
});
});
})(jQuery, window, document);
У наведеному вище коді ви помітите, що ми перевіряємо, чи разрешено дозволити подання. Це означає, що ми не дозволимо нашій формі подати користування, event.preventDefault
і тоді ми виконаємо певну логіку перевірки, і якщо ми будемо раді, встановимо дозвілSubmit на істинне.
Це дійсно єдиний ефективний метод робити протилежне event.preventDefault()
- ви також можете спробувати видалити події, які, по суті, могли б досягти того ж самого.
Ось щось корисне ...
Перш за все ми натиснемо на посилання, запустимо якийсь код, а потім виконаємо дію за замовчуванням. Це стане можливим за допомогою event.currentTarget Погляньте. Тут ми спробуємо отримати доступ до Google на новій вкладці, але перш ніж нам потрібно запустити якийсь код.
<a href="https://www.google.com.br" target="_blank" id="link">Google</a>
<script type="text/javascript">
$(document).ready(function() {
$("#link").click(function(e) {
// Prevent default action
e.preventDefault();
// Here you'll put your code, what you want to execute before default action
alert(123);
// Prevent infinite loop
$(this).unbind('click');
// Execute default action
e.currentTarget.click();
});
});
</script>
Це те, що я використовував для його встановлення:
$("body").on('touchmove', function(e){
e.preventDefault();
});
І щоб скасувати це:
$("body").unbind("touchmove");
Жодне з рішень мені тут не допомогло, і я зробив це, щоб вирішити свою ситуацію.
<a onclick="return clickEvent(event);" href="/contact-us">
І функція clickEvent()
,
function clickEvent(event) {
event.preventDefault();
// do your thing here
// remove the onclick event trigger and continue with the event
event.target.parentElement.onclick = null;
event.target.parentElement.click();
}
Я вважаю, що "навпаки" було б імітувати подію. Ви можете використовувати.createEvent()
На прикладі Mozilla:
function simulateClick() {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("checkbox");
var cancelled = !cb.dispatchEvent(evt);
if(cancelled) {
// A handler called preventDefault
alert("cancelled");
} else {
// None of the handlers called preventDefault
alert("not cancelled");
}
}
Ref: document.createEvent
jQuery має .trigger()
змогу викликати події на елементах - іноді корисно.
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
jquery on () може бути іншим рішенням цього. особливо, якщо мова йде про використання просторів імен .
jquery on () - це лише поточний спосіб прив'язки подій (замість bind ()). off () - це скасувати їх. і коли ви використовуєте простір імен, ви можете додавати та видаляти кілька різних подій.
$( selector ).on("submit.my-namespace", function( event ) {
//prevent the event
event.preventDefault();
//cache the selector
var $this = $(this);
if ( my_condition_is_true ) {
//when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
$this.off("submit.my-namespace").trigger("submit");
}
});
Тепер, використовуючи простір імен, ви можете додати декілька цих подій і зможете видалити їх, залежно від ваших потреб .., хоча подання може бути не найкращим прикладом, це може стати в нагоді при натисканні або натисканні клавіші або будь-якому іншому ..
Це не пряма відповідь на питання, але це може допомогти комусь. Моя думка - ви лише зателефонуєте на попередні умови () на основі деяких умов, оскільки немає сенсу проводити подію, якщо ви викликаєте prevenDefault () для всіх випадків. Отже, якщо умови та виклик предотвращаютDefault () лише тоді, коли умова / и будуть виконані, функціонуватимуть звичайним чином для інших випадків.
$('.btnEdit').click(function(e) {
var status = $(this).closest('tr').find('td').eq(3).html().trim();
var tripId = $(this).attr('tripId');
if (status == 'Completed') {
e.preventDefault();
alert("You can't edit completed reservations");
} else if (tripId != '') {
e.preventDefault();
alert("You can't edit a reservation which is already attached to a trip");
}
//else it will continue as usual
});
ви можете використовувати це після методу "предотвратиDefault"
// Тут evt.target повертає події за замовчуванням (наприклад: URL-адреса defult тощо)
var defaultEvent=evt.target;
// Тут ми зберігаємо подію за замовчуванням ..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
цей код працював на мене для відновлення події після того, як я використав:
event.preventDefault(); to disable the event.
event.preventDefault = false;
Я використав наступний код. Це прекрасно працює для мене.
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
;