маска jquery работает только один раз после загрузки содержимого ajax - PullRequest
0 голосов
/ 24 ноября 2018

Некоторое содержимое отображается с помощью ajax для визуализации в div в виде лайтбокса, который закрывается, когда пользователь нажимает снаружи (этот контент удаляется в этот момент):

Каждый раз, когда пользователь нажимает на целевой div,некоторый контент поступает на этот контроллер:

контроллер:

def ajax_load
  // some code
end

И, наконец, эта функция js вызывается из контроллера:

ajax_load.js.erb

<% if @variable %> // embedded variable
  $(target_div).html("<%= j render 'path' %>");

  $('.some_div').on('click', '#target_element', function(e) {
    e.preventDefault();
    $("input#element_0").mask("00/00"); // works only once
    $("#element_1").prop('checked','checked'); // works
    $("#element_2").show(); // works       
  });

<% end %>

Внутри этого лайтбокса у меня есть несколько входов, и эта функция jquery mask вызывается, и она действительно работает, когда я открываю этот элемент один раз на странице, но если закрыть лайтбокс и вызвать его снова, это неи другие строки этой функции нажатия продолжают работать, например, «прыгает» функция маски.

Если я попытаюсь заставить эту маску работать напрямую с консоли браузера после того, как она перестала работать, она не изменится.

Obs: Я также провел несколько тестов на консоли браузера:

После того, как строки этого кода уже были загружены из файла js, единственный способ заставить это работать на консоли браузера - это немного изменить путь jquery:

$(".previous_div input#element_0").mask("00/00");

и чтобы заставить его работать снова, нам нужно изменить немного больше:

$("body .previous_div input#element_0").mask("00/00");

1 Ответ

0 голосов
/ 26 ноября 2018

Я решил эту проблему таким образом, что я думаю, что это не самый рекомендуемый.

Из-за такого поведения я дублировал идентификатор (и проверяя исходный код, в котором его нет), я изменил идентификатор элемента и снова замаскировал его, и после этого мне помогло,Теперь я могу закрыть этот лайтбокс, многократно открывать его и сразу ввести маску.

$("input#element_0").mask("00/00");
$("input#element_0").attr("id","element_0_masked");
$("input#element_0").mask("00/00");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...