2014-10-09 3 views
1

Я пытаюсь разобраться с каким-то эффектом переключения на неупорядоченный список HTML. То, что я пытаюсь сделать, - это преобразовать в LI, используя jquery (не jQuery mobile), когда я касаюсь его на устройстве с сенсорным экраном и восстанавливаю вид при нажатии в другом месте за пределами текущего LI.Переключить вид элементов списка на сенсорных устройствах

это HTML пример:

<ul> 
    <li class="item1"> 
    <div class="div1">Info</div> 
    <div class="div2" style="display:none;">Tools</div> 
    </li> 
    <li class="item2"> 
    <div class="div1">Info</div> 
    <div class="div2" style="display:none;">Tools</div> 
    </li> 
    <li class="item3"> 
    <div class="div1">Info</div> 
    <div class="div2" style="display:none;">Tools</div> 
    </li> 
</ul> 

Так в основном, если я нажимаю на «ITEM2», «див1» должен скрыть и «div2» должно быть видно, внутри «div2» некоторые кнопки, которые вы можете взаимодействовать с. Но тогда, когда я прикасаюсь к «item2», «div1» должен быть снова виден, а «div2» должен скрываться. Я пробовал использовать nouseenter и mouseleave с jquery, но это вызывает беспорядок, когда вы пытаетесь прокрутить или коснитесь других элементов LI в том же списке, а также попытались использовать toggle, но пока не повезло. Теперь я не могу найти простой, но эффективный способ добиться того, чего хочу, надеюсь, вы, ребята, можете мне помочь в этом.

Спасибо!

EDIT: Вот рабочий пример, который не работает должным образом на сенсорных устройствах http://jsfiddle.net/T5HMt/44/

+0

Какие функции вы хотите для случая, когда пользователь щелкает ст.2 (на этом событии div2 из item2 будет виден и div1 скроется), а затем снова пользователь нажимает на item2. – Ashish

+0

Ну, ничего не происходит, если вы нажмете на div2, так как идея состоит в том, чтобы иметь некоторые кнопки внутри div2, которые не будут взаимодействовать с текущим списком –

+0

отлично.Еще один вопрос/понимание в отношении вашего требования. Если пользователь нажимает на item1, а затем на item2, а затем на item3, тогда будет отображаться div2 всех этих li, а затем, если пользователь нажимает где-то еще на экране, тогда вы хотите, чтобы все div2 спрятались и все div1 отображались. Правильно ли я отношусь к вашему требованию? – Ashish

ответ

1

Ну, похоже, я нашел способ решить мою собственную проблему с решением, очень похожим на решение, предоставленное Tushar Raj. Вместо того, чтобы отображать скрытый div на мыши, я сделал это на событии клика, а затем спрятал его при уходе с мыши. Дело в том, что mousenter одновременно запускает две вещи на сенсорных экранах, первое - событие «mouseenter», а затем событие «touchstart», поэтому, если у вас есть ссылки внутри div, которые отображаются на событии mouseenter, они также будут «щелканы».

$(document).on({ 
     click: function() { 
      $(this).find('.main').hide(); 
      $(this).find('.second').show(); 
     }, 
     mouseleave: function (event) { 
      $(this).find('.main').show(); 
      $(this).find('.second').hide(); 
     } 
    },'.search'); 

и рабочий example он работает, как ожидалось на сенсорных экранах

Спасибо всем за помощь мне

+0

Хорошее описание. – Ashish

1

По моему разумению вы хотите соответствующий div2, чтобы показать и скрыть Div1 когда Ли касание (ПРИМЕР- По событию крана на «item2», «div1» из «item2» должен скрываться, и «div2» из «item2» должен быть видимым). И вы хотите показать «div1» и скрыть «div2» только тогда, когда пользователь удаляет где-то за пределы li (вне любого LI, упомянутого в вашем вопросе).

Проверьте этот код, если он вам поможет.

$(".item1, .item2, .item3").click(function(){ 
     $(this).children(".div2").css("display", "block"); 
     $(this).children(".div1").css("display", "none"); 
}); 

$(document).click(function(e) { 
    var target = e.target; 
    if (!$(target).parents().is('.item1') && !$(target).parents().is('.item2') && !$(target).parents().is('.item3')) { 
     $(".div2").css("display", "none"); 
      $(".div1").css("display", "block"); 
    } 
}); 

Работа скрипка - http://jsfiddle.net/Ashish_developer/5jpyzkmt/

В скрипке я дал границу с LI только для иллюстрации.

+0

Привет, спасибо за ваш ответ. Это хорошо работает, но я не упомянул, что каждый «ли» создается программно, также я хотел бы скрыть открытую «ли», когда я нажимаю другую «ли» в том же список. Я обновил свой ответ с помощью рабочего примера, чтобы проиллюстрировать, чего я хочу достичь. –

0

Попробуйте hover. Он должен работать и для сенсорных устройств.

$('.item1,.item2,.item3').on('hover',function(){ 
     $(this).find('.div1').hide(); 
     $(this).find('.div2').show(); 
    },function(){ 
     $(this).find('.div1').show(); 
     $(this).find('.div2').hide(); 
    }); 
+0

Спасибо за ваш ответ, вы не можете использовать «зависание» с событием «on», вместо этого вы должны использовать методы mouseenter, mouseleave. Я уже пробовал ваше решение, и он не работает на сенсорных устройствах, это похоже на хорошее решение, но я думаю, что лучший подход будет использовать события «click» или что-то подобное. –

Смежные вопросы