JQuery / мобильный Safari ошибка? - PullRequest
1 голос
/ 26 апреля 2011

У меня есть интересная проблема ... Я пытаюсь создать таблицу, которая показывает только 3 столбца одновременно, и с помощью стрелок влево и вправо можно скрыть два правых столбца и показать еще 2 скрытыхстолбцы, эффективно прокручивая столбцы справа.

Мне удалось добиться этого здесь: http://reach4urphone.com/player/weapons?gamertag=kit001 (к вашему сведению: этот код больше не используется по этой ссылке, я пошел за дополнительнымисовместимое кросс-браузерное решение).

Проблема в том, что, хотя это работает в последних версиях Chrome, IE9 и Safari, оно не работает на моем iPhone4 или iPad2 (мои основные целевые платформы).Так что я думаю, что, возможно, есть ошибка в jQuery или мобильном Safari, не поддерживающая часть моей реализации.Вот мой единственный код JQuery (обратите внимание, что я использую вкладки пользовательского интерфейса jQuery в первой строке, каждая из которых имеет таблицу на своей панели):

$(document).ready(function () { $("#tabs").tabs(); });

$('#rightArrow').live('click', function () {
    var curr = $(this).closest('table').find('.selected');
    var next = curr.next().next();

    if (next.length === 0)
        next = curr.siblings(':first-child').next();

    curr.hide().removeClass('selected').next().hide();
    next.show().addClass('selected').next().show();
});

$('#leftArrow').live('click', function () {
    var curr = $(this).closest('table').find('.selected');
    var prev = curr.prev().prev();

    if (prev.length === 0)
        prev = curr.siblings(':last-child').prev();

    curr.hide().removeClass('selected').next().hide();
    prev.show().addClass('selected').next().show();
});

Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Код, который вы разместили, на самом деле отличается от источника по предоставленной вами ссылке - среди обработчиков событий onmouseup и без привязок jQuery вы используете следующий код на своем сайте:

var curr = $(window.event.srcElement).closest('table').find('.selected');

Это не работает в Firefox. Попробуйте изменить это на код в своем посте (используя вместо этого объект), и мы отладим оттуда.

1 голос
/ 26 апреля 2011

Хорошо, я пришел к какому-то решению для тех, кто сталкивался с той же проблемой. Как я уже сказал, jQuery live () не очень совместим с мобильным Safari, как об ошибке здесь: http://bugs.jquery.com/ticket/5677

Ранее я использовал метод jQuery click () для привязки обработчика к событию click, однако, поскольку я генерирую часть своего контента с помощью AJAX, мне нужно было использовать live () для регистрации обработчика кликов для нового контента, вставленного в DOM.

Поэтому, пока команда jQuery не справится с этой ситуацией, я просто добавил:

onclick="functionName(this)" 

справа от моей кнопки со стрелкой вправо и влево, которые вызывают соответствующие функции и дают ссылку на стрелку, на которую нажали. Как указал Кристиан (спасибо), использование window.event.srcElement поддерживается не всеми браузерами. Наконец, я понимаю, что это не «ненавязчивый JavaScript» способ, но я не эксперт по JavaScript, и это будет по крайней мере пока.

Полный текст доступен на моем сайте @ http://reach4urPhone.com/player/weapons?gamertag=kit001

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