jquery:按钮选择器无法处理动态按钮字段

时间:2012-08-31 13:09:55

标签: jquery dynamic jquery-selectors

在下面的代码中,jquery selector $(":button")可以选择(+)按钮。

但是,当我根据下拉菜单的选定值创建新按钮时。相同的选择器无法选择新的( - )按钮。

附上代码:

 <script>
$(document).ready(function () {
$(":button").click(function () {
        alert("here");
        })
});

</script>

<select id="thing" name="garden" >
<option id="u" selected="selected" ></option>
<option id="1" > Flowers </option>
<option id="2" > Shrubs </option>
<option id="3" > Trees </option>
<option id="4" > Bushes </option>
<option id="5" > Grass</option>
<option id="6" > Dirt</option>

</select>

<button> + </button>

<div id="area"></div>

<button> + </button>
<script>
$("#thing").change(function () {
      var str = "";
      var id="";
      var num=1;
      $("#thing option:selected").each(function () {
            str += $(this).text() + " ";
            id = $(this).attr('id');
    $("#"+id).attr('disabled',"disabled");
          });
      if (id != "u") {
          var tx=$("#area").html();
          var button="<button>-</button>";
          $("#area").html(tx+"<div>"+str+" "+button+"</div>");
      };
    }).trigger('change');
</script>

7 个答案:

答案 0 :(得分:3)

$(document).on('click', 'button', function () {
    alert("here");
});

这是一个委托的事件处理程序,这意味着它可以处理动态添加的元素。来自on method的jQuery文档:

  

委派事件的优势在于它们可以处理来自的事件   稍后添加到文档中的后代元素。通过   选择一个保证在当时存在的元素   委托事件处理程序附加,您可以使用委托事件   避免频繁附加和删除事件处理程序的需要。这个   element可以是a中视图的容器元素   例如,模型 - 视图 - 控制器设计,或者如果事件是文档   handler希望监视文档中的所有冒泡事件。该   文档元素在之前的文档头部中可用   加载任何其他HTML,因此可以安全地在那里附加事件   等待文件准备好。

答案 1 :(得分:2)

对于dynamicicallay生成的元素,应该委派事件,您可以使用on方法。

$(document).on('click', 'button', function() {
        alert("here");
});

另请注意,:button选择器已弃用。

答案 2 :(得分:0)

试试这个:

$("#thing").on("click","button",function () {
   alert("here");
})

答案 3 :(得分:0)

尝试on而不是click

$(":button").on("click",function () {
        alert("here");
})

Jquery Docs

答案 4 :(得分:0)

添加新元素后,您只需要为按钮绑定click事件。即在创建新按钮的代码之后,再次编写此函数

 $(":button").click(function () {
    alert("here");
    })

答案 5 :(得分:0)

原因是,因为您的click函数仅将click事件侦听器绑定到文档准备好后直接存在的元素。如果您希望事件也可以监听动态创建的元素,那么请使用.on()函数。 该函数的文档是here

答案 6 :(得分:0)

$(":button").bind("click", function () { alert("here"); });

只需使用bind,更容易..