Отключение поведения перетаскивания по умолчанию для ссылок в iOS Safari - PullRequest
6 голосов
/ 23 сентября 2011

Я занимаюсь разработкой веб-приложения. Я пытаюсь отключить большую часть поведения iOS Safari по умолчанию для ссылок, поэтому я установил свойство CSS «-webkit-touch-callout» для ссылок на «none». Тем не менее, я все еще замечаю, что если я удержу палец на ссылке в течение секунды или около того, затем перетащить ее, а затем отпустить, ссылка откроется в новом окне. Я не хочу такого поведения. Я бы хотел, чтобы он открывался в том же окне или вообще ничего не делал. Кто-нибудь знает, как это сделать?

РЕДАКТИРОВАТЬ: Я использую jQuery, поэтому можно использовать функции обработки событий jQuery, если это упростит вещи.

РЕДАКТИРОВАТЬ 2: Для некоторых ссылок я использую обработчики, чтобы переопределить их поведение по умолчанию. Например:

$(".categoryList a").live("click", function(e) {
    e.preventDefault();
    $.get(
        "someOtherUrl",
        {someVariable: "someValue"},
        function(result) {
            $(".result").html(render(result));
        }
    );
});

Мой настоящий код более сложен, чем этот, но я хочу сказать, что я переопределяю действие по умолчанию для щелчка некоторых ссылок и любое решение, которое я использую для решения этой проблемы, не должно мешать этим обработчикам . Решение Sanooj не работает для моих целей, потому что назначение «window.location» всегда перенаправляет браузер независимо от того, есть ли у меня какие-либо обработчики для предотвращения этого поведения. Возможно, мне не следует использовать ссылки для этой цели, но именно так было приложение до того, как я начал над ним работать, и изменение этого было бы большим проектом. Мне интересно, есть ли более легкий и простой способ исправить это.

Ответы [ 5 ]

9 голосов
/ 28 сентября 2011

пожалуйста, отметьте это

$('a').live('click', function (event) {
    event.preventDefault();
    window.location = $(this).attr("href");
});
1 голос
/ 02 октября 2011

Установите тайм-аут перед загрузкой содержимого ajax и определите движения пальцев:

 function setupAnchorClicks() {
  var timer = null;
  $(".categoryList a").live("click", function(e) {
    e.preventDefault();

    timer = setTimeout(function() {
       // ...
    }, 1000);

  }).live("touchmove", function() {
    clearTimeout(timer);
  });
}

setupAnchorClicks();

Это, вероятно, не работает из коробки, потому что я ужасный кодер JavaScript, но вы понимаете)

0 голосов
/ 04 октября 2011

Чтобы решить вашу проблему с помощью решения Sanooj, вы пытались вызывать свои собственные функции из его предложенного кода?Например:

$('a').live('click', function(event)
{
    if($(this).hasClass('categoryList'))
        categoryListSpecificFunction();
    event.preventDefault();
    window.location = $(this).attr("href");
});

В настоящее время я не могу проверить это с веб-приложением, но оно работает для меня в обычном браузере, т.е. предотвращает нормальное поведение, но также позволяет мне вызывать определенные функции на основена занятиях.

0 голосов
/ 29 сентября 2011

Я знаю, что вы сказали, что уже пробовали это, но у вас может возникнуть проблема специфичности.Вы можете попробовать что-то вроде этого.

* {
    -webkit-touch-callout: none !important;
}

Надеюсь, это поможет.

Если это не решит вашу проблему, попробуйте здесь

0 голосов
/ 23 сентября 2011

Я не знаю, будет ли это работать, но в веб-наборе по умолчанию (chrome / safari) вы устанавливаете атрибут ondragstart="return false;", чтобы отключить режим перетаскивания по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...