Javascript данные не сохраняются при вызове события слушателя - PullRequest
1 голос
/ 02 апреля 2020

Как я могу получить ruby данные для сохранения в javascript вызванных событиях?


У меня проблема с javascript переменные. Вероятно, это связано с тем, что у меня не было знаний об областях и используемой переменной, хотя я пробовал разные типы переменных. (Это мой первый бит настоящего javascript кода). То, как я вижу области в javascript, выглядит следующим образом: если оно объявлено в функции, вы не можете использовать его вне функции. Если вы объявляете это первым (вне функции), вы можете обновить значения в функции и использовать их снаружи, позже в другом теге. Что я и сделал.

Что я делаю: я перебираю набор имен, которые я получаю из ruby модели, здесь:

 <% @items.each do |record| %>

Позже в моем коде я откройте другой скрипт html тег внутри этого .each:

 <script> edit_items("<%=record.name%>") </script>

Эта функция 'edit_items' дает мне массив всех имен моих отношений записей. (Это объявлено в верхней части страницы)

y=[];

function edit_items(x){
      y.push(x);
}

Причина, по которой я зацикливаюсь на этих элементах, заключается в создании прослушивателей для каждого из элементов (они предназначены для пользователей, поэтому будет Dynami c количество, соответствующее каждому пользователю). У меня есть ul с элементами li со ссылками на модальное всплывающее окно (html на той же странице).

Я пытаюсь сказать javascript, чтобы установить значение ввода (#name_box) в модальном к информации по ссылке нажал. Хотя существует несколько ссылок для одного текстового поля, поэтому я должен указать, какой идентификатор будет отправлен в поле. Внизу страницы:

$(document).ready(function() {
    console.log("ready");

    for (id = 0; id < y.length; id++){
        console.log("starting li click events");
        $("#" + y[id]).click(function () {
           console.log("y: " + y[id]);
           console.log("doc: " + document.getElementById(y[id]));
        });
    }
});

Я создаю прослушиватели событий для каждой ссылки, создаваемой с помощью этих динамических c данных из ruby массива. Проблема в том, что действие для клика не выполняется, пока страница не будет на стороне клиента. Я думаю, что вы не можете получить данные на стороне сервера (ruby) от слушателей на стороне клиента.

Я получаю это в console.log, когда нажимаю на ссылки:

y: undefined
admin:318 doc: null
admin:317 y: undefined
admin:318 doc: null

, что означает, что для меня y существует, но не установлено и do c не имеет значения ( не найден элемент с неопределенными данными).

1 Ответ

1 голос
/ 02 апреля 2020

Проблема не в том, что данные не сохраняются из массива ruby. Проблема была в том, что for l oop id не был сохранен в событии действия слушателей. Да, действие будет запущено после того, как l oop закончится. (это было просто для установки слушателей со всеми элементами массива)

Редактировать javascript код этого:

$(document).ready(function() {
    console.log("ready");
    for (id = 0; id < y.length; id++){
        $("#" + y[id]).click(function () {
            let id = document.getElementById(this.id).id
            document.getElementById("name_box").value = id
        });
    }
});

Выберите идентификатор элемента, по которому щелкнули (это означает, что я am..in в контексте элемента), установите значение поля имени в id. Wallah!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...