Не работает if
Привет.
Проблема в том, что нужно проверить свойство display у элемента. Но if не работает, точнее "chek1" не принтется, хотя если посмотреть код страницы, то - id="block-links" style="display: none;". Вот код -
$('#open-close').show();
$('#block-links').hide();
$('#open-close').click(function(e) {
e.preventDefault();
$('#block-links').slideToggle();
$('.canDisable').css('pointer-events', 'none');
hideChek();
});
function hideChek(){
console.log("chek");
if ( $('#block-links').css('display') == 'none' ){
console.log("chek1");
$('.canDisable').css('pointer-events', 'auto');
}
}
Вот так при загрузке документа chek1 принтется, но функцию вызвать не получается. Как вызвать подобную функцию?
$("#block-links").each(function hideChek(){
console.log("chek");
if ( $(this).css('display') == 'none' ){
console.log("chek1");
$('.canDisable').css('pointer-events', 'auto');
}
});
|
cadijob,
проверять css('display') надо до анимации или после e.preventDefault(); тут $('#block-links').slideToggle(или тут); |
Цитата:
|
Цитата:
('#open-close').click(function(e)
|
cadijob,
:-? |
Что?)
|
Цитата:
а когда != hidden то - $('.canDisable').css('pointer-events', 'none'); |
cadijob,
$('#open-close').click(function(e) {
e.preventDefault();
if ( $('#block-links').is('hidden') ){
$('.canDisable').css('pointer-events', 'auto');
}
else $('.canDisable').css('pointer-events', 'none');
$('#block-links').slideToggle();
});
|
cadijob,
это можно записать и без if ... else:
$('.canDisable').css('pointer-events', ['auto', 'none'][+$('#block-links').is('hidden')]);
|
Цитата:
$('#open-close').click(function(e) {
e.preventDefault();
if ( $('#block-links').is('hidden') ){
console.log("auto");
$('.canDisable').css('pointer-events', 'auto');
}
else {
$('.canDisable').css('pointer-events', 'none');
console.log("none");
}
$('#block-links').slideToggle();
});
Только none принтит... Даже когда скрываю элемент. |
Цитата:
$('#open-close').click(function(e) {
e.preventDefault();
$('.canDisable').css('pointer-events', ['auto', 'none'][+$('#block-links').is('hidden')]);
$('#block-links').slideToggle();
});
? |
cadijob,
делайте минимальный макет, только самое необходимое. |
Цитата:
|
cadijob,
я двоеточие забыл :) is(' тут hidden') можно так
$(function() {
$("#open-close").show();
$("#block-links").hide();
$("#open-close").click(function(a) {
a.preventDefault();
$("#block-links").slideToggle(400, function() {
$(".canDisable").css("pointer-events", ["none", "auto"][+$(this).is(":hidden")])
})
})
});
или так
$(function() {
$("#open-close").show();
$("#block-links").hide();
$("#open-close").click(function(a) {
a.preventDefault();
$(".canDisable").css("pointer-events", ["auto","none"][+$("#block-links").is(":hidden")])
$("#block-links").slideToggle(400)
})
});
|
Шикарно. Спасибо большое.
Ещё вопрос: вот когда ссылка на теги отключена, jQuery и Ajax могут взаимодействовать с этими элементами? |
Цитата:
|
А как это называется -
["none", "auto"][+$(this).is(":hidden")])
? Я так понял что в одной строке помещаться целое условие(зависимость от hidden), можно туда ещё переменную поставить, что бы также от него зависела?Хотелось бы изучить. |
cadijob,
:blink: массив это называется, is(":hidden") возвращает true/false alert(+false) alert(+true) alert(["none", "auto"][+false]) alert(["none", "auto"][+true]) |
cadijob,
Цитата:
|
Вот так сделал:
OpenArea=[+$(this).is(":hidden")];
console.log(OpenArea);
Как сделать, чтобы в переменную заносил не 0 и 1, а true и false и, если это важно для дальнейшей работой с переменной без []? |
Цитата:
|
OpenArea=[$(this).is(":hidden")];
вот так надо |
Цитата:
|
Цитата:
$(".canDisable").click(function() {
alert("ok");
if (OpenArea == false) {
console.log(OpenArea);
$(this).css( "transform", "scale(0.85)" );
}
});
Даже alert не работает. А когда pointer-events: auto; то alert работает. Тогда как отключить ссылку? |
cadijob,
$("li").on("click", function() {
alert($("a", this).text());
})
|
Цитата:
|
cadijob,
можно только гадать, что вы хотите сделать ...
$(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();
})
});
|
Цитата:
|
cadijob,
не понимаю |
Цитата:
$(".tags li").on("click", function(){
alert($("a", this).text());
// if (OpenArea == false) {
// console.log(OpenArea);
// $(this).css( "transform", "scale(0.85)" );
// }
});
То есть эта функция не будет работать. Когда display != none то будет.
if(OpenArea == false){
$(".tags li").on("click", function(){
alert($("a", this).text());
// if (OpenArea == false) {
// console.log(OpenArea);
// $(this).css( "transform", "scale(0.85)" );
// }
});
}
Пример выше не работает. |
cadijob,
не понимаю!!! видимо более ничем помочь не могу. |
cadijob,
if(OpenArea == false), это для упертых. ) 0 - это тоже false, а 1 - это тоже true, если проверяется истина/ложь (булево значение), то есть писать if(OpenArea == false), это мягко говоря лишние хлопоты, так как если OpenArea равна или 0 или false, то if(!OpenArea) в обоих случаях вернет true. Бывает, что например функция может возвращать как 0 так и false, в этом случае проверка if(!name(props)) не годится, вот тогда проверять нужно не только значение, но и тип: if(OpenArea === false) и это называется строгим сравнением. У вас же проблемы не потому что вместо true ноль или наоборот, а в том, что где-то логика кода вашего не соответствует ожиданиям. |
Цитата:
Сделал так -
if (OpenArea === false) {
$(".tags li").on("click", function(){
alert($("a", this).text());
// if (OpenArea == false) {
// console.log(OpenArea);
// $(this).css( "transform", "scale(0.85)" );
// }
});
}
В консоли OpenArea - true. Но код, выше, выполняется. |
Цитата:
|
Всё.
$(".tags li").on("click", function(){
if (OpenArea === false) {
alert($("a", this).text());
// if (OpenArea == false) {
// console.log(OpenArea);
// $(this).css( "transform", "scale(0.85)" );
// }
}
});
Работает. Спасибо за совет с ===. |
cadijob,
лучше бы не колдовали, а обьяснили алгоритм, того что хотите сделать. |
Цитата:
Сейчас постараюсь объяснить. Вы же макет видели? Так вот, когда форма открывается то по тегам нельзя перейти(то есть не редеректит на другую страницу во время клика) и в дальнейшем ajax будет эти теги в массив собирать по кликам(когда форма открыта, опять же). А вот когда форма закрыта то можно и перейти по ссылке в теге, и "в дальнейшем ajax будет эти теги в массив собирать по кликам" не будет работать. P.S. Заноситься в массив будет id тега, который в свою очередь берётся из БД. |
Цитата:
|
Цитата:
|
cadijob,
что не так?
<!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&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();
})
});
</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>
|
| Часовой пояс GMT +3, время: 06:26. |