2009-08-28 2 views
3

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

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

<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

Я не знаком с ВМИ, но когда Вы писали:

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

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

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

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

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

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

1

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