Jquery Delegate事件仅在两个选择器之一上工作

时间:2016-01-29 14:44:44

标签: javascript jquery

$("body").on("change", "input[type='checkbox'],input[type=radio]", function(event){
  $("input[type='checkbox']").on('change',function() {
    var that = this;

    if (!$(this).parent().hasClass("remember-label")){
      $(this).parent().css("background-color", function() {
          return that.checked ? "#C0E9F7" : "";
      });
    }

  });

  $("input[type=radio]").on('click',function() {
    $(this).parents().eq(1).siblings().css("backgroundColor","");
    $(this).parents().eq(1).css("backgroundColor","#C0E9F7");

  });

});

虽然我认为这应该可行,但它仅适用于单选按钮。由于每次内容动态变化时我都必须放置两个选择器,因为有时单选按钮被添加到DOM以及其他一些时间复选框。

问题是输入的点击区域变得无法点击,除非您明确单击复选框或单选按钮而不是覆盖整个区域的标签。

这里是html(它有导轨,但你可以理解结构)

<label for="choice_<%= choice.id %>">
            <%= radio_button_tag("choice","#{choice.id}",false,class:"radio big-radio") %>
            <% if choice.image? %>
              <%= image_tag rewrite_url(choice.image_url(:resized)), class:"choice-image" %>
            <% else %>
              <%= choice.description %>
            <% end %>

          </label>

代码用于单选按钮,但同样适用于复选框。

2 个答案:

答案 0 :(得分:0)

为什么你需要在事件处理程序中使用事件处理程序..只需你可以像这样使用它

SELECT d.name databasename,
      r.command,
      r.percent_complete,
      r.session_id,
      r.start_time,
      estimated_finish_time = DATEADD(MILLISECOND,estimated_completion_time, CURRENT_TIMESTAMP) FROM sys.dm_exec_requests r INNER JOIN  sys.databases d ON r.database_id = d.database_id WHERE r.command like '%BULK INSERT%'
  

注意:请确保包含jquery

答案 1 :(得分:0)

你应该只绑定一次:

$("body").on("change", "input[type='checkbox'],input[type=radio]", function(event){
     // here you can check if this is check box or radio

        if($(this).is(":checkbox")) {
            // do this
        }else{
           // do for radios
        }

 });