Скрипт — https://liveweave.com/gWoHkb
Я создавал начальный шаблон/демонстрацию для приложений веб-дизайна и сегодня столкнулся с проблемой.
Когда я выбираю привязку, я не хочу, чтобы href перенаправлял браузер.
Я знаю, что могу использовать для этого «хеш» javascript:void(0)
или #
, однако я не хочу менять его хеш, я просто не хочу, чтобы это было проблемой при разработке.
Поэтому я применил к нему return false;
через .on(click mousedown touchstart mouseup touchend)
. Я заметил, что когда я сделал это, мой метод перетаскивания для выбранного элемента также был установлен на return false, поэтому он продолжал перетаскивать, даже когда моя мышь была поднята. (не должно произойти)
В то время как это решило проблему перенаправления, это также создало большую проблему. Поэтому я удалил mouseup touchend
из этой функции. Сделал новый, чтобы установить следующее значение true.
$('#canvas').children().filter("a").on('click mousedown touchstart', function() {
return false;
}).on('mouseup touchend', function() {
return true;
});
Поэтому я решил пойти другим путем. Когда активен инструмент выбора или инструмент редактирования, я устанавливаю для всех якорей, имеющих свойство target="_blank"
, значение target="_self"
.
Теперь единственный способ, которым я знаю, как предотвратить перенаправление, - это использовать unbeforeunload, который всегда предлагает диалоговое окно.
// Ask if they want to leave.
var hook = true;
window.onbeforeunload = function() {
if (hook) {
return "All your stuff may not be saved. Are you sure you want to leave?"
}
}
function unhook() {
hook=false;
}
Я не знаю, как обойти диалог и остаться на странице.
Согласно @duskwuff, вам не разрешено заставлять пользователя оставаться, когда в браузере запрашивается перенаправление с помощью onbeforeunload.