Скрипт — 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.
 
                                                                     
                                                                    