Кажется, что он каким-то образом заблокировал себя на старом, теперь уже несуществующем сервере, и сохранил его после переустановки приложения. Вот как я решил проблему:
В metro bundler выберите тип подключения «Туннель», скопируйте и отправьте URL на свой телефон. Если вы затем щелкните по нему на своем телефоне, он должен перенаправить в приложение выставки. После этого он отклеился, и я снова смог нормально использовать его с QR-кодом!
Решение состоит в том, чтобы добавить обработчик щелчка, который предотвратит распространение щелчка при начале перетаскивания. А затем удалите этот обработчик после выполнения сброса. Последнее действие следует немного отложить, чтобы сработало предотвращение кликов.
Решение для сортировки:
...
.sortable({
...
start: function(event, ui) {
ui.item.bind("click.prevent",
function(event) { event.preventDefault(); });
},
stop: function(event, ui) {
setTimeout(function(){ui.item.unbind("click.prevent");}, 300);
}
...
})
Решение для перетаскивания:
...
.draggable({
...
start: function(event, ui) {
ui.helper.bind("click.prevent",
function(event) { event.preventDefault(); });
},
stop: function(event, ui) {
setTimeout(function(){ui.helper.unbind("click.prevent");}, 300);
}
...
})
самое легкое и надежное решение? просто создайте прозрачный элемент по своему перемещаемому.
.click-passthrough {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
background: transparent;
}
element.draggable({
start: function () {
},
drag: function(event, ui) {
// important! if create the 'cover' in start, then you will not see click events at all
if (!element.find('.click-passthrough').length) {
element.append("<div class='click-passthrough'></div>");
}
},
stop: function() {
// remove the cover
element.find('.click-passthrough').remove();
}
});
Пробовали ли вы отключить ссылку с помощью event.preventDefault (); в событии запуска и повторно включить его в событии остановки перетаскивания или событии отпускания с помощью отмены привязки?
Я хотел бы добавить к этому, что, похоже, предотвращение события click работает только в том случае, если событие click определено ПОСЛЕ события draggable или sortable. Если событие click добавлено первым, оно активируется при перетаскивании.
Решение, которое у меня сработало и не требует тайм-аута: (да, я немного педантичен; -)
Я добавляю класс маркера к элементу при запуске перетаскивания, например "без щелчка". Когда элемент отбрасывается, запускается событие щелчка - точнее, если перетаскивание заканчивается, на самом деле его не нужно отбрасывать на допустимую цель. В обработчике щелчков я удаляю класс маркера, если он есть, иначе щелчок обрабатывается нормально.
$('your selector').draggable({
start: function(event, ui) {
$(this).addClass('noclick');
}
});
$('your selector').click(function(event) {
if ($(this).hasClass('noclick')) {
$(this).removeClass('noclick');
}
else {
// actual click event code
}
});