Jquery 新按钮的调用功能
我有一个id为“openWindow”的按钮 第一次单击时:Jquery 新按钮的调用功能,jquery,html,Jquery,Html,我有一个id为“openWindow”的按钮 第一次单击时: 出现警报“打开”,id更改为“关闭窗口” 再次点击 警报“关闭”将不会出现 有人能告诉我为什么吗?因为您在元素id为closeWindow之前绑定了事件。您可以使用jQuery的on事件处理程序将事件绑定到body或wrapper元素之类的东西上,它可以像这样工作 $('body').on('click', '#closeWindow', function() { alert('Close'); }); 因为您在元素
- 出现警报“打开”,id更改为“关闭窗口”
- 警报“关闭”将不会出现
有人能告诉我为什么吗?因为您在元素id为closeWindow之前绑定了事件。您可以使用jQuery的
on
事件处理程序将事件绑定到body或wrapper元素之类的东西上,它可以像这样工作
$('body').on('click', '#closeWindow', function() {
alert('Close');
});
因为您在元素id为closeWindow之前绑定了事件。您可以使用jQuery的
on
事件处理程序将事件绑定到body或wrapper元素之类的东西上,它可以像这样工作
$('body').on('click', '#closeWindow', function() {
alert('Close');
});
$(“#closeWindow”)
选择执行代码时具有该ID的所有元素
在单击按钮之前,您不会更改id
,该按钮位于该按钮之后
您可以使用委派的事件处理程序:
$(document).on("click", "#closeWindow", handler);
…注意,除非您还为第一个处理程序使用委托事件处理程序,否则即使您更改了ID,它仍将绑定到按钮。$(“#closeWindow”)
在执行代码时选择具有该ID的所有元素
在单击按钮之前,您不会更改id
,该按钮位于该按钮之后
您可以使用委派的事件处理程序:
$(document).on("click", "#closeWindow", handler);
…请注意,除非您还为第一个处理程序使用委托事件处理程序,否则即使您更改了ID,它仍将绑定到按钮。发生这种情况是因为当
$(“#closeWindow”)。单击(
创建事件处理程序时,没有ID为“closeWindow”的元素,因此事件处理程序未附加到任何内容。事件处理程序附加到创建处理程序时存在的元素。它们无法检测随后添加的元素
现在,正如其他答案所建议的那样,您可以使用委托事件来规避这一问题
但是…更改ID并不是很好的做法-元素ID应该唯一且永久地标识元素。相反,您可以设置一个数据属性或类来记录其当前状态,并且只使用一个事件处理程序
下面是一个使用数据属性的简单演示:
$(“#打开关闭窗口”)。单击(函数(){
var btn=$(本);
var状态=btn.数据(“下一步”);
如果(状态=“打开”){
btn.数据(“下一步”、“结束”);
文本(“点击关闭窗口”);
}否则{
btn.数据(“下一步”、“开放”);
文本(“点击打开窗口”);
}
});
单击打开窗口发生这种情况是因为当执行单击(
)创建事件处理程序时,没有id为“closeWindow”的元素,因此事件处理程序未附加到任何内容。事件处理程序附加到创建处理程序时存在的元素。它们无法检测随后添加的元素
现在,正如其他答案所建议的那样,您可以使用委托事件来规避这一问题
但是…更改ID并不是很好的做法-元素ID应该唯一且永久地标识元素。相反,您可以设置一个数据属性或类来记录其当前状态,并且只使用一个事件处理程序
下面是一个使用数据属性的简单演示:
$(“#打开关闭窗口”)。单击(函数(){
var btn=$(本);
var状态=btn.数据(“下一步”);
如果(状态=“打开”){
btn.数据(“下一步”、“结束”);
文本(“点击关闭窗口”);
}否则{
btn.数据(“下一步”、“开放”);
文本(“点击打开窗口”);
}
});
单击打开窗口这是因为在脚本运行时,关闭窗口不存在
要解决此类问题,可以绑定如下事件:
<div id="someParentDiv">
<button id="openWindow">Open Window on Click</button>
</div>
<button id="toggleWindow">Open Window on Click</button>
if (opened == false) {
alert("opened");
opened = true;
} else {
alert("Closed");
opened = false;
}
通过这种方式,jQuery将观察冒泡的点击,直到#someParentDiv
,并通过给定的选择器(#openWindow
和#closeWindow
)对其进行过滤
更好的方法建议
您可以通过执行以下操作来改进代码:
<div id="someParentDiv">
<button id="openWindow">Open Window on Click</button>
</div>
<button id="toggleWindow">Open Window on Click</button>
if (opened == false) {
alert("opened");
opened = true;
} else {
alert("Closed");
opened = false;
}
这是因为在脚本运行时,#closeWindow
不存在
要解决此类问题,可以绑定如下事件:
<div id="someParentDiv">
<button id="openWindow">Open Window on Click</button>
</div>
<button id="toggleWindow">Open Window on Click</button>
if (opened == false) {
alert("opened");
opened = true;
} else {
alert("Closed");
opened = false;
}
通过这种方式,jQuery将观察冒泡的点击,直到#someParentDiv
,并通过给定的选择器(#openWindow
和#closeWindow
)对其进行过滤
更好的方法建议
您可以通过执行以下操作来改进代码:
<div id="someParentDiv">
<button id="openWindow">Open Window on Click</button>
</div>
<button id="toggleWindow">Open Window on Click</button>
if (opened == false) {
alert("opened");
opened = true;
} else {
alert("Closed");
opened = false;
}
您可以通过创建一个变量来实现这一点,例如var opened=false;
。
然后ypu bind单击此按钮,而不更改其id。在该按钮内,您可以这样写:
<div id="someParentDiv">
<button id="openWindow">Open Window on Click</button>
</div>
<button id="toggleWindow">Open Window on Click</button>
if (opened == false) {
alert("opened");
opened = true;
} else {
alert("Closed");
opened = false;
}
您可以通过创建一个变量来实现这一点,例如var opened=false;
。
然后ypu bind单击此按钮,而不更改其id。在该按钮内,您可以这样写:
<div id="someParentDiv">
<button id="openWindow">Open Window on Click</button>
</div>
<button id="toggleWindow">Open Window on Click</button>
if (opened == false) {
alert("opened");
opened = true;
} else {
alert("Closed");
opened = false;
}
因为您在元素id为closeWindow
之前绑定了事件。您可以使用on
绑定事件,例如$('body')。on('click','#closeWindow',function(){alert('Close');})除了下面的答案之外,您应该注意,在运行时动态更改元素的id
不是一个好主意。它们是静态的,应该保持不变。如果您想在运行时更改元素的行为,我建议您添加/删除一个类,因为您在该元素运行之前绑定了事件closeWindow的id
。您可以在
上使用来绑定事件,它会起作用,例如$('body')。在('click','#closeWindow',function(){alert('Close');});`。除了下面的答案之外,您应该注意动态更改事件的id