Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 新按钮的调用功能_Jquery_Html - Fatal编程技术网

Jquery 新按钮的调用功能

Jquery 新按钮的调用功能,jquery,html,Jquery,Html,我有一个id为“openWindow”的按钮 第一次单击时: 出现警报“打开”,id更改为“关闭窗口” 再次点击 警报“关闭”将不会出现 有人能告诉我为什么吗?因为您在元素id为closeWindow之前绑定了事件。您可以使用jQuery的on事件处理程序将事件绑定到body或wrapper元素之类的东西上,它可以像这样工作 $('body').on('click', '#closeWindow', function() { alert('Close'); }); 因为您在元素

我有一个id为“openWindow”的按钮

第一次单击时:

  • 出现警报“打开”,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