Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Нужна помощь! (https://javascript.ru/forum/jquery/80397-nuzhna-pomoshh.html)

zulfukar 21.06.2020 19:16

Цитата:

Сообщение от laimas (Сообщение 526210)
У меня нет моб. устройств этого бренда, я не могу ничего проверить, но я могу сказать точно, что на этих устройствах возникает проблема с css :hover. Об этом много в сети написано, если только в этом проблема, почитайте как ее решают, ну или подключите jQuery Mobile.

Все оказалось намного проще. Сам сделал методом тыка, просто вместо этого куска кода
$(".navv li").unbind('mouseenter mouseleave').bind('mouseenter mouseleave', function() {
		 	// must be attached to li so that mouseleave is not triggered when hover over submenu
		 	$(this).toggleClass('hover');
		});

вставил
$(".navv li a.parent").unbind('click').bind('click', function(e) {
			// must be attached to anchor element to prevent bubbling
			e.preventDefault();
			$(this).parent("li").toggleClass("hover");
		});

и все работает так, как хотелось.

laimas 21.06.2020 19:28

Тогда вообще не понять, что там за проблема, и зачем сначала удалять обработчик, затем сразу его же и устанавливать.

zulfukar 21.06.2020 19:33

Цитата:

Сообщение от laimas (Сообщение 526223)
Тогда вообще не понять, что там за проблема, и зачем сначала удалять обработчик, затем сразу его же и устанавливать.

мне нужно было, чтобы на сенсорном экране подменю открывалось при клике на пункты меню. Сейчас я сделал так, что и на компе и на сенсорном экране подменю открывается только при клике. Это все, чего я хотел :)

laimas 21.06.2020 19:51

$(".navv li a.parent")
.unbind('click') //удаляет ранее установленный обработчик click
.bind('click' ... //устанавливает обработчик click


Это бессмыслица. У вас отменяет действие по умолчанию (переход) e.preventDefault();, а не unbind.

Что касается заменить открытие по наведению, то это у вас работает как раз на css. Ну если считаете, что теперь норма, пусть будет так.

zulfukar 21.06.2020 20:12

Цитата:

Сообщение от laimas (Сообщение 526227)
$(".navv li a.parent")
.unbind('click') //удаляет ранее установленный обработчик click
.bind('click' ... //устанавливает обработчик click


Это бессмыслица. У вас отменяет действие по умолчанию (переход) e.preventDefault();, а не unbind.

Что касается заменить открытие по наведению, то это у вас работает как раз на css. Ну если считаете, что теперь норма, пусть будет так.

ну я же не разбираюсь в этом. Напишите как должно быть.
Сейчас работает как надо. Если в коде есть что-то лишнее или какая-то ошибка, то напишите пожалуйста как будет правильно и я изменю.

оригинальный скрипт в этом сообщении.

laimas 21.06.2020 20:20

Цитата:

Сообщение от zulfukar
Напишите как должно быть.

$(".navv li a.parent").click(function(e) {
    e.preventDefault();
    //и далее ваш код
})


Это и есть чего хотелось.

Цитата:

Сообщение от zulfukar
Сейчас работает как надо.

Если вам надо открывать разделы горизонтального меню щелчком, то нужно подправить и CSS. Но тогда вопрос - зачем вся эта кухня? Правильно будет выбросить это меню вообще, взять то, что урок показывает. Оно все работает по щелчкам, насколько я помню. Плюс ему вообще не требуется JS/JQ, а если его сделать сплошной заливкой как у вас, то это упрощает и CSS, так как из него можно будет убрать градиентную заливку.

Но мы же не ищем легких путей, так? ;)

zulfukar 21.06.2020 20:25

Цитата:

Сообщение от laimas (Сообщение 526229)
$(".navv li a.parent").click(function(e) {
    e.preventDefault();
    //и далее ваш код
})


Это и есть чего хотелось.



Если вам надо открывать разделы горизонтального меню щелчком, то нужно подправить и CSS. Но тогда вопрос - зачем вся эта кухня? Правильно будет выбросить это меню вообще, взять то, что урок показывает. Оно все работает по щелчкам, насколько я помню. Плюс ему вообще не требуется JS/JQ, а если его сделать сплошной заливкой как у вас, то это упрощает и CSS, так как из него можно будет убрать градиентную заливку.

Но мы же не ищем легких путей, так? ;)

дело в том, что у меня в движке меню настраивается в админке, а на сайте выводится только {menu}
меню построено так: <ul><li></li></ul>, а в Вашем уроке есть лишние команды типа <label> и тд, которые мне некуда вставить. Мне пришлось искать меню имеющие такую структуру (<ul><li></li></ul>).

zulfukar 21.06.2020 20:59

Цитата:

Сообщение от laimas (Сообщение 526229)
$(".navv li a.parent").click(function(e) {
    e.preventDefault();
    //и далее ваш код
})

привел код к такому виду. Я правильно сделал? css править не пришлось, так как никаких изменений не произошло.
else if (ww >= 900) {
		$(".toggleMenu").css("display", "none");
		$(".navv").show();
		$(".navv li").removeClass("hover");
		$(".navv li a").unbind('click');
		$(".navv li a.parent").click(function(e) {
			e.preventDefault();
			$(this).parent("li").toggleClass("hover");
		});
	}

laimas 21.06.2020 21:01

Цитата:

Сообщение от zulfukar
дело в том, что у меня в движке меню настраивается в админке

В админке вы только разделы меню определяете, а вот код его определяется шаблоном, который можно подправить.

laimas 21.06.2020 21:18

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


Часовой пояс GMT +3, время: 21:57.