Ответы пользователя по тегу JavaScript
  • Как игнорировать поля у которых установлен display:none?

    @iCat
    Если бы у вас была однородная структура внутри <div class="wrapper"> (т.е. каждый input был бы обернут в свой div), можно было бы использовать такую выборку:
    console.log(document.querySelectorAll('.wrapper input').length); // 4
    console.log(document.querySelectorAll('.wrapper div:not(.hide) input').length); // 3


    Если вы не можете изменить структуру на однородную, и вам просто нужно посчитать количество не скрытых элементов, можно сделать так:
    console.log( document.querySelectorAll('.wrapper input').length - document.querySelectorAll('.wrapper .hide input').length); // 3


    Если вы не можете изменить структуру на однородную, и вам нужно получить все нескрытые элементы (при условии, что только скрытые элементы обернуты в div), можно воспользоваться такой выборкой:
    console.log(document.querySelectorAll('.wrapper > input').length); // 3


    Очень многое зависит от того, что именно нужно сделать, и какие у вас ограничения на изменение структуры html.
    Ответ написан
    Комментировать
  • Как передать переменную с классом элемента jquery?

    @iCat
    Имена классов начинаются с точки:
    var my = '.' + $('#1').attr('class');
    $(my).click(function() {
      $(my).css( "color", "green" )
    });
    Ответ написан
    Комментировать
  • Как установить задержку на открытие ссылки?

    @iCat
    Могу предположить, что вы добавляете товар в корзину при помощи ajax-запроса в JS, и сразу после совершения такого запроса переадресовываете пользователя на страницу корзины.
    Если я не ошибаюсь в предположении, то я не рекомендовал бы использовать таймаут, т.к. при использовании таймаута 1) вы не можете быть уверены в том, что скрипт, вызываемый ajax-запросом, выполнится за отведенное на таймаут время, соответственно все равно будут возможны ситуации, когда товар еще не добавился, а переадресация уже произошла; и 2) если скрипт выполнится за меньшее количество времени, чем отведено под таймаут, пользователь все равно будет оставаться на текущей странице, ожидая окончания таймаута, что не выглядит хорошим решением с точки зрения user experience.
    В таком случае наилучшим решением было бы совершать перенаправление на страницу корзины не сразу и даже не по таймауту, а в коллбэке ajax-запроса (при его успешном выполнении само собой). Этот вариант будет оптимальнее варианта с таймаутом, позволит перенаправлять на страницу только тогда, когда товар добавлен в корзину, плюс (при должной доработке) позволит обработать ситуации, когда товар не был добавлен в корзину из-за ошибки (отобразить ошибку пользователю, и т.п.).
    Если же я не прав, и JS и ajax не используются для обработки нажатия на кнопку submit, то вам и переадресация тогда не должна быть нужной, т.к. сабмит формы подразумевает переход на url, указанный в атрибуте action формы, и переадресацией в данном случае должен заниматься серверный скрипт, обрабатывающий данные формы.
    Ответ написан
    Комментировать
  • Как выполнить действие по клику ВНЕ определённой области?

    @iCat
    Для этого необходимо при клике на .column1 или .column3 останавливать "всплывание" события, а функцию, которую надо выполнять при клике вне этих элементов, повесить на "верхний" элемент, например, на body, и внутри этой функции первым делом проверять, остановлено ли всплывание, и если остановлено, то прерывать выполнение функции.
    function clickAnywhere (e) {
      if (e.isPropagationStopped()) return; // propagation was stopped, exiting
      // do if propagation was not stopped
      ..
    }
    $('body').on('click', clickAnywhere);
    $('.column1, .column3').on('click', function(e) {
      e.stopPropagation();
    });

    Рабочий пример.
    Ответ написан
  • Зачем скобки вокруг вложенных функций JS?

    @iCat
    Согласен с Алексей Тен. Вы, похоже, удалили лишние скобки.
    Исходя из того, что осталось, и вашего вопроса, подозреваю, вас интересуют конструкции вида
    (function(){
      // some code here
    })();

    Это т.н. immediately invoked functions. Код, находящийся внутри такой функции будет немедленно исполнен внутри своей собственной области видимости переменных.
    Ответ написан
    Комментировать