Ответы пользователя по тегу JavaScript
  • Как грамотно авторизоваться в расширении для GitLab?

    @KnightForce Автор вопроса
    Оказалось что авторизация не требуется.
    Можно просто слать запросы.
    У расширения есть доступ к сессии.
    Ответ написан
    Комментировать
  • Как победить ошибку "cannot read property of undefined"?

    @KnightForce
    Какая-то переменная / поле / аргумент имеет значение undefined - вместо ожидаемого.
    Вы берете у него еще что-то и получаете ошибку.
    Например:
    chats[context.chatId].users[context.senderId]

    Если chats[context.chatId] undefined, то у него нет никакого users.
    Ответ написан
    Комментировать
  • Как изменить данные в родители?

    @KnightForce
    У вас в методе open создается переменная int testText = 2;.
    Чтобы сменить значения в родителе - просто напишите testText = 2;.
    Если хотите изменить значения при наличии локальной testText в методе:
    class Child extends Parent{
       open(){
        @Output()
         int testText = 2;
         this.testText  = 2;
         // Присвоит значение в переменную у класса, а не в созданную выше.
         // В данном случае у родителя из-за наследования.
       }
    }
    Ответ написан
    Комментировать
  • Как найти значение свойства объекта в массиве по ключу свойства?

    @KnightForce
    1)
    Где-то в коде:
    var obj = tdList[1];

    В другом месте:
    tdList[tdList.indexOf(obj)]

    2) По нормальному:
    tdList.find((item) => item.task == 'a');

    3) Вариант, который соответствует вашему коду:
    indexOf у массивов уже есть, так что назвал по-другому
    Array.prototype.indexOfObjectValue = function(value) {
        for(var i = 0; i < this.length; i++) {
            if(typeof this[i] != 'object') continue;
            for(var key in this[i]) {
                if(this[i][key] == value) return this[i];
            }
        }
    }
    
    tdList.indexOfObjectValue('a').task
    Ответ написан
    Комментировать
  • Как получить индекс элемента с двумя классами?

    @KnightForce
    let list = $('.class1');
    for(let i = 0; i < list.length; i++) {
     if(list.eq(i).hasClass('class2')) {
        console.log(i);
        break;
     }
    }


    let list = $('.class1');
    for(let i = 0; i < list.length; i++) {
     if(list[i].className.includes('class2')) {
        console.log(i);
        break;
     }
    }


    $('.class1').each((index, item) => {
     if(item.className.includes('class2')) console.log(index)
    } );
    Ответ написан
    Комментировать
  • Как правильно адаптировать обычный JS-код под требования React Native? Что следует учитывать?

    @KnightForce
    Как-то расплывчато.

    Что бы делал я.
    Задача максимально сохранить код в том виде в каком он написан под Web.
    1) Если нужно будет переносить UI, то эту часть придется переписывать.
    2) Геолокация. Представим что обращение к ней сильно различается по синтаксису и данные возвращаются в ином виде.
    Тогда подключаем библиотеку в отдельный файл и пишем класс обёртку, которая сделает нужные запросы и вернёт ответ в нужном виде для кода с веб.

    Гипотетический пример.
    На Web синтаксис:
    GEO.getLocation(function(result){
    
    });


    А на React Native:
    let geo = await System.getGeo();
    let location = await geo.getLocation();


    Как можно адаптировать:
    class Geo {
        static async getLocation(callback) {
            try {
                let geo = await System.getGeo();
                callback(await geo.getLocation());
            } catch(e) {}
           
            geo = null;
    
        }
    
    }


    Этим примером я хотел показать, что разность реализации можно скрыть классом обёрткой.
    Ответ написан
    Комментировать
  • Как задать диапазон поля input + js?

    @KnightForce
    var elem = document.getElementById('myInput');
    elem.onchange=function(e){
        var value = parseInt(e.target.value);
        if(!value || value <=10 || value > 100) {
            /*Что-то делать.
              Очищаю поле.
            */
            e.target.value = '';
        }
    }
    Ответ написан
  • Один input из нескольких?

    @KnightForce
    1) Поле с +7 можно сделать блоком, либо input с value=''+7" и в обработчике ввода написать return false или e.preventDefault.
    2) Перемещение при вводе номера нужно отлавливать по длинне заполненных символов, поставить на поле числовой тип и/или на oninput (но я делал на key события, так как в IE не срабатывает при удалении символом, минус в том, что поведение не идеальное и если ввести не то, то оно появится и сразу удаляется, по этому можно комбинировать input событие на ввод, а keydown на удаление, если IE не нужны, то только input) событие проверять является то что введено числом.
    Например:
    function(e) {//Обработчик события
        var value = e.target.value;
        value = parseInt(value);
        e.target.value = value;
        if(value.length>5){//Примерное число
            /*
                В этом месте можно либо использовать blur и focus, либо программно вызывать нажатие на клавишу таб.
            */
            retrurn false;
        }
    }


    3) При обновлении страницы и так все обнулится.
    А если по кнопке то задай инпутам value=''.
    Ответ написан
    Комментировать
  • Почему массив равен не массиву?

    @KnightForce
    ![] == false
    [] при сравнении становится true
    Выходит что true != false
    А вообще даже [1] == [1] выдаст false два разных объекта (в js массив тоже объект).
    Ответ написан
    Комментировать
  • Как в android средствами react отобразить pdf?

    @KnightForce
    Тебе понадобится какая-нибудь либа.
    Например:
    https://stackoverflow.com/questions/38658716/react...
    Ответ написан
    Комментировать
  • React: как правильно нормализовать положение курсора в инпуте?

    @KnightForce
    Если тебе просто нужно заменить все точки на восклицательном при вводе/изменении input, то:
    onChange(e) {
        e.target.value=e.target.value.replace(/\./g, "!");//Регулярное выражение, которое заменит все точки
    }
    Ответ написан
    Комментировать
  • Как повесить слушателя на существующий дом елемент ReactJS?

    @KnightForce
    Повесить слушателя можно так:
    А)
    1) В теге jsx написать ref={(elem)=>{this.elem = elem}}
    2) В коде или в том же ref написать:
    elem.addEventListener
    Но это не лучшая практика.

    Б)
    class NavigationBlock extends Component {
    
      constructor(props) {
        super(props);
        this.props=props;
        this.handlerClick=this.handlerClick.bind(this);
      }
    
      handlerClick(e) {
          //обработка клика
      }
    
      render() {
          let emenets = bigArrayData.map((item)=>{
              return <div onClick={this.handlerClick}>item</div>
          }); 
          return <div>{elements}</div>
      }
    }


    Если тебе нужно отследить какой инпут нажат, можешь пойти таким путем:
    А) отлавливать что-то через e.target.
    Б)
    handlerClick(number) {
           return (e)=>{
                  alert(number); //Типа обработка
           }
      }
    
      render() {
          let emenets = bigArrayData.map((item, i)=>{
              return <div onClick={this.handlerClick(i)}>item</div>//вместо i любое значение
          }); 
          return <div>{elements}</div>
      }

    Ответ написан
    Комментировать
  • Как сделать собственные события в ReactJS?

    @KnightForce
    Как делаю я:
    handlerClick(type) {
        return(e){
            let {onClickDiv, onClickSpan} = this.props;
            switch(type) {
                 case "clickDiv":
                     onClickDiv && onClickDiv(e);
                     break;
    
                  case "clickSpan":
                     onClickSpan && onClickSpan(e);
                     break;
            }
        }
    }
    
    render() {
        return(
            <div onClick={this.handlerClick("clickDiv")}>
                <span onClick={this.handlerClick("clickSpan")></span>
            </div>
        );
    }


    В итоге можешь писать так:
    <MyComponen onClickDiv={что-то}  onClickSpan={что-то} /t>
    Ответ написан
    Комментировать
  • Как добавить класс к блоку, который коснулся верха окна браузера?

    @KnightForce
    Сверить позиции, если позиции равны - добавить класс.
    Можешь через offset(), или style.top.
    Ответ написан
    Комментировать
  • Что означает эта запись с двумя !!?

    @KnightForce
    Отрицание приводит любой тип к логическому / boolean и возвращает обратное.
    0, "", null, undefined - false.
    Числа, строки (кроме пустой), массивы, объекты, функции - true.
    !true == false //!tue равно false
    !0 == true
    /*
    0 становится конвертируется в логический тип - false, потом возвращается противоположное значение true
    */

    Двойное отрицание используется, чтобы привести к логическому типу.
    например, в зависимости от строки тебе нужно в переменную присвоить true или false.
    function f(str) {
        return !!str;
    }
    
    f("") // вернет false
    f("1") //вернет true
    Ответ написан
    2 комментария
  • Как сделать одно из двух полей выбранным?

    @KnightForce
    1) Вызови на ней click():
    elem.click(); //Это запуск события из кода
    2) Если скрываешь добавляя определенный класс, то добавь его сразу.
    3) Если через style, то:
    elem.style.display="block";
    Ответ написан
    Комментировать
  • Как выполять render с задержкой?

    @KnightForce
    setTimeout(()=>{
        //Код - контекст привязал через стрелочную функцию
    }, 5000)
    Ответ написан
    Комментировать
  • Как можно импортировать JQuery в React Native?

    @KnightForce
    Как-то так.
    Установить:
    npm install --save jquery .

    Использовать:
    import jQuert from jquery;
    Ответ написан
    Комментировать
  • Зачем нужен redux?

    @KnightForce
    Абстрактно: У тебя есть 1 узел слева на вложенности 500 узлов, 2 узел на вложенности 1000 и третий на 700, все в 3 разных направления и необходим, чтобы они работали синхронно от данных. И вот тут у тебя есть единый контейнер от которого и получаешь данные. А чтобы не передавать через цепочку props - используй контекст.
    Написано только что
    Ответ написан
    Комментировать