【问题标题】:I can't access the keys of checkbox with javascript when I generate the checkbox dynamically当我动态生成复选框时,我无法使用 javascript 访问复选框的键
【发布时间】:2013-10-21 14:26:11
【问题描述】:

我在 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 函数时,这不起作用。如果您能给我任何帮助,我将不胜感激!

【问题讨论】:

  • 使用event delegation
  • 有没有js错误。尝试在点击功能中使用“console.log”打印一些东西?

标签: javascript jquery ruby-on-rails ruby erb


【解决方案1】:

使用.on()

由于元素是动态添加的,你不能直接将事件绑定到它们。所以你必须使用事件委托。

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

【讨论】:

    【解决方案2】:

    由于复选框是动态添加的,所以需要使用event delegation来注册事件处理程序

    // 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);
    

    【讨论】:

    • 当然他使用的是 jQuery 1.6 或更高版本——你刚刚告诉他使用需要 jQuery 1.7 的.on
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多