2

我正在尝试将单击事件绑定到div具有id="unit". 这些div是在运行时生成的,我的 javascript 似乎不起作用。

我的 javascript 点击事件。

$("#unit").click(function(){
  alert('1');
});

在ajax调用之前。

<div id="content">
    <div id="building">

    </div>

    <div id="units">

    </div>
</div>

在ajax调用之后。

<div id="content">
        <div id="building">
            <div value="1" class="buildingBlock"><h3 style="text-align: center;">Level - 1</h3></div>
            <div value="2" class="buildingBlock"><h3 style="text-align: center;">Level - 2</h3></div>
            <div value="3" class="buildingBlock"><h3 style="text-align: center;">Level - 3</h3></div>
            <div value="4" class="buildingBlock"><h3 style="text-align: center;">Level - 4</h3></div>
        </div>


        <div id="units">
            <div value="1" id="unit">#02-01<br>3 room(s)</div>
            <div value="2" id="unit">#02-02<br>2 room(s)</div>
            <div value="3" id="unit">#02-03<br>5 room(s)</div>
        </div>
    </div>
4

3 回答 3

6

因为您是动态附加#unit元素,所以您需要将事件委托给最近的父元素。试试这个:

$("#units").on('click', '.unit', function(){
    alert('1');
});

此外,多个id属性无效。您应该更改代码以使用类,如下所示:

<div id="units">
    <div value="1" class="unit">#02-01<br>3 room(s)</div>
    <div value="2" class="unit">#02-02<br>2 room(s)</div>
    <div value="3" class="unit">#02-03<br>5 room(s)</div>
</div>
于 2012-05-30T08:54:17.583 回答
2

您不能拥有多个具有相同 ID 的元素。

改用类。例如class="unit"

当您绑定事件使用时$(".unit")..


此外,如果我们正在考虑 Ajax 请求,无论是在成功方法中还是在后端,您都应该准备额外的 js 代码来正确初始化新元素。在父母身上监听事件实际上是一种黑客行为。

所以,如果你有:

$.get("someurl", {}, function(data){
    $("#units").append(data);
    $("#units .unit").unbind("click").bind("click", function(){ 
// your click handler here
    });
});

至少我会那样做,除非你有特殊需要控制来自父母的事件。

于 2012-05-30T08:54:11.440 回答
0

更改idclass_ unit

<div id="units">
   <div value="1" class="unit">#02-01<br>3 room(s)</div>
   <div value="2" class="unit">#02-02<br>2 room(s)</div>
   <div value="3" class="unit">#02-03<br>5 room(s)</div>
 </div>

尝试使用委托事件处理程序。

$("#units").on('click', '.unit', function(){
  alert('1');
});
于 2012-05-30T08:53:51.450 回答