Я не могу получить доступ к ключам флажка с помощью JavaScript, когда я генерирую флажок динамически

0

Я создал флажок в свой html.erb следующим образом:

<%= check_box_tag(:fenix_fee_charged) %>
<%= label_tag(:fenix_fee_charged, "FENIX_FEE_CHARGED") %>
<%= check_box_tag(:fenix_fee_no_charged) %>
<%= label_tag(:fenix_fee_no_charged, "FENIX_FEE_NO_CHARGED") %>

Я создал javascript, чтобы установить тот или иной:

$('#fenix_fee_charged').click(function(){
    $('#fenix_fee_no_charged').removeAttr("checked");
});
$('#fenix_fee_no_charged').click(function(){
    $('#fenix_fee_charged').removeAttr("checked");
});

Когда мои параметры проверки увеличились, я решил создать флажок динамически:

<% Enums::FlightEnum::FENIX_FLIGHTS_NOTIFICATIONS.each do |notification, value| %>
  <%= check_box_tag notification, value %>
  <%= label_tag notification, notification.to_s.upcase, :class => "checkbox inline" %>
<% end %>

Когда я проверил функцию javascript, это не сработало. Я был бы признателен за любую помощь, которую вы можете мне дать!

  • 0
    Используйте делегирование событий .
  • 0
    Есть ли ошибка JS. попытаться напечатать что-нибудь, используя 'console.log' в функции щелчка?

2 ответа

1
Лучший ответ

Поскольку флажок добавлен динамически, вам нужно использовать делегирование событий для регистрации обработчика событий

// New way (jQuery 1.7+) - .on(events, selector, handler)
$(document).on('click', '#fenix_fee_charged', function(event) {
    $('#fenix_fee_no_charged').removeAttr("checked"); 
});

$(document).on('click', '#fenix_fee_no_charged', function(event) {
    $('#fenix_fee_charged').removeAttr("checked"); 
});

РЕДАКТИРОВАТЬ

Также попробуйте использовать метод .prop() например:

// Uncheck the checkbox
$('#fenix_fee_no_charged').prop("checked", false);

// Check the checkbox
$('#fenix_fee_no_charged').prop("checked", true);
  • 0
    спасибо большое палаш !!! это работает для меня!
  • 0
    Конечно, он использует jQuery 1.6 или выше - вы просто сказали ему использовать .on который требует jQuery 1.7.
2

Использовать .on()

Поскольку элементы добавляются динамически, вы не можете напрямую связывать события с ними. Поэтому вам нужно использовать Event Delegation.

$(document).on('click', '#fenix_fee_charged', function(event) {
    $('#fenix_fee_no_charged').removeAttr("checked"); 
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню