конфликт между слайдером JQuery и iui (iphone) - PullRequest
3 голосов
/ 28 августа 2009

Я пытаюсь получить слайдер в веб-приложении для iphone, я использую iui для управления пользовательским интерфейсом. Слайдер, кажется, вызывает некоторый конфликт с iui.js, когда вы перетаскиваете слайдер, он пытается открыть другую страницу. Тем не менее, он отлично работает, когда вы просто нажимаете на какую-то часть панели. Я думал, что это было событие слайда, вызывающее его, но это событие вызвано в обоих случаях, поэтому я немного застрял. Любая помощь будет принята с благодарностью.

Простой тестовый пример (нажмите, чтобы получить ползунок):

<head>
    <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>

    <script type="application/x-javascript" src="http://www.joehewitt.com/iui/iui/iui.js"></script>
    <link href="http://www.joehewitt.com/iui/iui/iui.css" type="text/css" rel="stylesheet" />

    <script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
    <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
    <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.slider.js"></script>
    <link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" />

    <script language="javascript">
        $(document).ready(function(){
            $("#slider").slider()
        });
    </script>
</head>
<body>
    <div class="toolbar">
        <h1 id="pageTitle"></h1>
        <a id="backButton" class="button" href="#"></a>
    </div>
    <ul title="slider test" selected="true">

        <li class="group">Page 1</li>       
        <li>
            <a class="mainnav" href="#page2">page 2</a>
        </li>
</ul>
    <div id="page2" title="foo.inc">
        <div id="slide_container">
            <div id="slider"></div>
        </div>
    </div>
</body>

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Я не знаком с iui, но когда вы написали:

но это событие срабатывает в обоих случаях

Я думаю, вы что-то упустили (что вполне может объяснить вашу проблему). Если вы посмотрите на код слайдера, вы увидите, что перетаскивание мышью имеет другой набор событий, которые запускаются; посмотрите на "_mouseCapture" и "_mouseDrag". _mouseDrag вызывает "_slide", но также сначала "_normValueFromMouse". Что касается "_mouseCapture", то он не подключен напрямую в коде слайдера (так что, очевидно, это делается с помощью некоторого общего кода пользовательского интерфейса jQuery), поэтому я не могу точно сказать, что он задействован, но на основании названия кажется вероятным, что это так.

В любом случае, _mouseDrag, _normValueFromMouse, или, возможно, _mouseCapture (или какая-то функция, которую они вызывают), кажется, непреднамеренно вызывает какую-то функцию iui. Я полагаю, что iui подключает функцию с тем же именем, что и функция UI слайдера / jQuery, и делает это после того, как jQuery UI подключает ее, и в результате слайд вызывает функцию iui.

Представьте, была ли определена функция goSomewhere в пользовательском интерфейсе jQuery, а затем вызвана с помощью _mouseDrag. Обычно это будет работать нормально, но если кто-то (iui) определит свою собственную функцию goSomewhere, эта функция будет вызываться вместо _mouseDrag.

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

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

1 голос
/ 31 августа 2009

Спасибо за помощь machineghost. Если у кого-то еще есть эта проблема, то она вызвана функцией iui 'addEventListener', собирающей щелчки на слайдере. Он пытается установить выбранный атрибут на тег «#», который разрывает страницу. Вы можете проверить, является ли тег реальным, прежде чем разрешить его продолжить, но это не идеальное решение, но оно работает.

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