Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает if (https://javascript.ru/forum/jquery/69675-ne-rabotaet-if.html)

рони 11.07.2017 23:12

cadijob,
или даже так, если обработчик выше например в li

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>title</title>

    <link href="https://fonts.googleapis.com/css?family=Roboto&amp;subset=cyrillic" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>
$(function() {
    $("#open-close").show();
    $("#block-links").hide();
    $("#open-close").click(function(a) {
        a.preventDefault();
        $("#block-links").slideToggle(400)
    });
    $(".canDisable").on("click", function(a) {
 if ($("#block-links").is(":visible")) {a.preventDefault(); a.stopPropagation();
 $(this).parent().css( "transform", "scale(0.85)" );

 }
})
   $("li").on("click", function(a) {alert("переход");})

});
    </script>
</head>
<body>
    <div class="wrapper" id="scroll">

        <div class="container">
            <div class="botHeader">
                <a href="#" id="open-close">
                    <div class="talkBtn">
                        <p>Кнопка которая октрывает форму</p>
                    </div>
                </a>
            </div>
            <div class="borderShadow"></div>
            <div class="talk" id="block-links">
                <form action="">
                    <input type="text" name="textTitle" placeholder="Тема сообщения">
                    <textarea name="textarea" rows="8" cols="80" placeholder="Текст"></textarea>
                </form>
            </div>
            <div class="tags">
                <ul>
                    <li><a href=""  class="canDisable">Тег 1</a></li>
                    <li><a href=""  class="canDisable">Тег 2</a></li>
                    <li><a href=""  class="canDisable">Тег 3</a></li>
                    <li><a href=""  class="canDisable">Тег 4</a></li>
                    <li><a href=""  class="canDisable">Тег 4</a></li>
                    <li><a href=""  class="canDisable">Тег 5</a></li>
                    <li><a href=""  class="canDisable">Тег 6</a></li>
                    <li><a href=""  class="canDisable">Тег 7</a></li>
                    <li><a href=""  class="canDisable">Тег 8</a></li>
                    <li><a href=""  class="canDisable">Тег 9</a></li>
                    <li><a href=""  class="canDisable">Тег 10</a></li>
                    <li><a href=""  class="canDisable">Тег 11</a></li>
                    <li><a href=""  class="canDisable">Тег 12</a></li>
                </ul>
            </div>
            <div class="borderShadow"></div>
            <div class="posts">

                </div>
            </div>
        </div>
        <div class="footer">

        </div>

</body>
</html>

cadijob 11.07.2017 23:16

:( :( :(
Не туда вставил его... Извините.
Да видно, что он намного красивее моих костылей, но с моими я могу сделать так -
$(this).css( "transform", "scale(0.85)" );
то есть применить это свойство к li с классом tags. А вашем варианте как такое сделать?
Всё. Вижу

cadijob 11.07.2017 23:21

$("li").on("click", function(a)
            {
                alert("переход4");
            })

Не принтится alert.

рони 11.07.2017 23:22

Цитата:

Сообщение от cadijob
Не принтится alert.

что это значит?

cadijob 11.07.2017 23:23

Не выводится сообщение(alert)

рони 11.07.2017 23:24

Цитата:

Сообщение от cadijob
применить это свойство к li

смотрите код снова, пост №41
$(".canDisable").on("click", function(a) {
 if ($("#block-links").is(":visible")) {a.preventDefault(); a.stopPropagation();
 $(this).parent().css( "transform", "scale(0.85)" );

 }
})

рони 11.07.2017 23:27

Цитата:

Сообщение от cadijob
Не выводится сообщение(alert)

оно выводится когда форма скрыта, перед переходом на другую страницу.

cadijob 11.07.2017 23:27

$(".canDisable").on("click", function(a) {
            if ($("#block-links").is(":visible"))  a.preventDefault();
            console.log($(this).text());
            $(this).css( "transform", "scale(0.85)" );
        })

    });

Как сделать, что бы стиль применялся не к ссылке с классом canDisable, а к .tags li? К тому li по которому пользователь кликнул?

рони 11.07.2017 23:29

cadijob,
когда форма открыта, li трансформируется (новый вариант)

рони 11.07.2017 23:29

Цитата:

Сообщение от cadijob
Как сделать, что бы стиль применялся не к ссылке с классом canDisable, а к .tags li? К тому li по которому пользователь кликнул?

смотрите пост пост №41

cadijob 11.07.2017 23:30

Цитата:

Сообщение от рони (Сообщение 458244)
смотрите код снова, пост №41
$(".canDisable").on("click", function(a) {
 if ($("#block-links").is(":visible")) {a.preventDefault(); a.stopPropagation();
 $(this).parent().css( "transform", "scale(0.85)" );

 }
})

Всё. Теперь всё идеально. Спасибо большое.

laimas 12.07.2017 04:51

Цитата:

Сообщение от cadijob
Почему?

Потому, что придется сесть за талмуд и учить, учить, учить. )

cadijob 12.07.2017 16:49

А из-за этого кода, якоря не перестанут работать? А то даже обычные, без jQ, не работают.

laimas 12.07.2017 17:01

Цитата:

Сообщение от cadijob
А из-за этого кода, якоря не перестанут работать?

a.preventDefault(); - отменяет действие по умолчанию, для ссылок, это переход по ним, так что если $(".canDisable"), это ссылки с адресами, то по ним перехода не будет. Остальные ссылки на странице этот код не затронет.

a.stopPropagation(); - останавливает всплытие события, то есть обработчики выше его не получат. Что у вас при этом на странице в данной ситуации, разбираться вам.

cadijob 12.07.2017 17:19

Точно. Убрал a.preventDefault(); и якоря без jQ заработали, а с ним нет.
Вот так смотрю offset :
var id  = $(this).attr('href');
            //узнаем высоту от начала страницы до блока на который ссылается якорь
            top = $(id).offset().top;
            console.log($(top));

И длина(lenght) всегда равна единице.
В чём может быть проблема?
В уроке -
$(document).ready(function(){
	$("#menu").on("click","a", function (event) {
		//отменяем стандартную обработку нажатия по ссылке
		event.preventDefault();

		//забираем идентификатор бока с атрибута href
		var id  = $(this).attr('href'),

		//узнаем высоту от начала страницы до блока на который ссылается якорь
			top = $(id).offset().top;
		
		//анимируем переход на расстояние - top за 1500 мс
		$('body,html').animate({scrollTop: top}, 1500);
	});
});

Но что с preventDefault();, что без, ничего не меняется.

laimas 12.07.2017 17:53

Цитата:

Сообщение от cadijob
В чём может быть проблема?

В глупости, которая в коде заложена - $(this).attr('href') вернет значение ссылки, строку, а какой у набора букв может быть offset().top? Или href возвращает корректное имя идентификатора объекта?

cadijob 12.07.2017 17:57

Цитата:

Сообщение от laimas (Сообщение 458319)
В глупости, которая в коде заложена - $(this).attr('href') вернет значение ссылки, строку, а какой у набора букв может быть offset().top? Или href возвращает корректное имя идентификатора объекта?

id в консоли принтит: #TalkAnchor, содержимое id

laimas 12.07.2017 18:09

Если это ID, тогда Ок. А что за проблема то, чего lenght (проверка существования объекта), и что не меняется, прокрутка до его позиции?

laimas 12.07.2017 18:25

cadijob,
я просмотрел кратко 50 предыдущих серий этого сериала, в которых рони вам как бы уже объяснил все от и до. Включая и то, то если щелчок по ссылке, у которой в href будет не обязательно url, а хеш, то при отсутствии preventDefault() произойдет переход внутри страницы, то есть к блоку с ID указанному в href. Он разместится в максимально возможное положение вверху.

Вопрос - какое смещение при этом будет возвращать $(этот смещенный вверх объект).offset().top?

Если какие-то проблемы после применения preventDefault() (какие не понять), то кто вас заставляет использовать для этого тег А? Щелкать можно по чему угодно. Заменить такие ссылки (без uri) например на SPAN, используйте их. В чем проблема то?

cadijob 12.07.2017 18:28

Цитата:

Сообщение от laimas (Сообщение 458322)
Если это ID, тогда Ок. А что за проблема то, чего lenght (проверка существования объекта), и что не меняется, прокрутка до его позиции?

//узнаем высоту от начала страницы до блока на который ссылается якорь
top = $(id).offset().top;
console.log($(top)); = lenght: 1;(в массиве window)
как я понял по комментарием к коду, lenght(которая в переменной top) это расстояние до якоря?

cadijob 12.07.2017 18:44

Цитата:

Сообщение от laimas (Сообщение 458325)
cadijob,
Если какие-то проблемы после применения preventDefault() (какие не понять), то кто вас заставляет использовать для этого тег А? Щелкать можно по чему угодно. Заменить такие ссылки (без uri) например на SPAN, используйте их. В чем проблема то?

Даже если я, просто, сделаю так -
top = $("#TalkAnchor").offset().top;

Ничего не работает.

laimas 12.07.2017 19:15

Цитата:

Сообщение от cadijob
top = $(id).offset().top;
console.log($(top)); = lenght: 1;(в массиве window)
как я понял по комментарием к коду, lenght(которая в переменной top) это расстояние до якоря?

Вы думаете, что делаете? top = $(id).offset().top - это смещение объекта, а чем тогда будет являться $(top)?!.

Я не буду режиссером продолжающим данный сериал, вам уже один рассказал весь его сценарий. :) Что еще надо для понимания, думать и править недопустимое в нем. Думайте.

cadijob 12.07.2017 19:29

Цитата:

Сообщение от laimas (Сообщение 458334)
Вы думаете, что делаете? top = $(id).offset().top - это смещение объекта, а чем тогда будет являться $(top)?!.

Я не буду режиссером продолжающим данный сериал, вам уже один рассказал весь его сценарий. :) Что еще надо для понимания, думать и править недопустимое в нем. Думайте.

Ясно. Спасибо.

cadijob 13.07.2017 14:56

Вся проблема была в кастомном скорлле и немного в css.

cadijob 13.07.2017 14:58

Убрал у wraper position:fixed и всё заработало.

laimas 13.07.2017 16:14

Цитата:

Сообщение от cadijob
Вся проблема была в кастомном скорлле и немного в css.

:victory: Так держать. ;)

cadijob 13.07.2017 17:04

Цитата:

Сообщение от laimas (Сообщение 458399)
:victory: Так держать. ;)

Сарказм?:(

laimas 13.07.2017 19:09

Цитата:

Сообщение от cadijob
Сарказм?

Нет, одобрение, найти и понять, это опыт.


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