Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
Javascript 未拾取Jquery修改的选择器类_Javascript_Jquery - Fatal编程技术网

Javascript 未拾取Jquery修改的选择器类

Javascript 未拾取Jquery修改的选择器类,javascript,jquery,Javascript,Jquery,我在构建一个jquery时遇到了一些问题,这个jquery捕获了一个在前一个事件之后修改过的选择器 例如,我有一个类似如下的html: <div class='1'>test</div> 警报起作用,当我检查元素时,该类已切换到“2” 现在,当我再次单击它时,显示以下内容: $(".1").click(function(){ alert('found 1!'); $(this).attr('class', '2'); }); $(".2").clic

我在构建一个jquery时遇到了一些问题,这个jquery捕获了一个在前一个事件之后修改过的选择器

例如,我有一个类似如下的html:

<div class='1'>test</div>
警报起作用,当我检查元素时,该类已切换到“2”

现在,当我再次单击它时,显示以下内容:

$(".1").click(function(){
    alert('found 1!'); 
    $(this).attr('class', '2');
});
$(".2").click(function(){
    alert('found 2!'); 
    $(this).attr('class', '1');
});
我仍然得到“找到1!”作为警报


我所尝试的是因为某种原因而不可能实现的,是我做错了还是有更好的方法?谢谢

您需要使用jquery(或)函数为动态更新的元素绑定事件

如下代码所示

$(".1").on("click", function(){
    alert('found 1!'); 
    $(this).attr('class', '2');
});

$(".2").on("click",function(){
    alert('found 2!'); 
    $(this).attr('class', '1');
});
.click()仅在执行时绑定。您要查找的是.live()或.on()。我将使用.on(),jQuery 1.7语法:

$(document).on("click", ".1", function() {
  console.log('1 clicked');
  $(this).attr('class', '2');
});
$(document).on("click", ".2", function() {
  console.log('2 clicked');
  $(this).attr('class', '1');
});
执行此操作时:

$(".1").click(function()
您正在绑定到特定的DOM元素。一旦绑定,对象上的类就不再重要了。事件处理程序绑定到对象本身。jQuery执行此语句的方式是,它查找所有具有
class=“1”
的DOM对象,并在其上设置事件侦听器


如果希望事件处理程序处理对页面的动态更改,则需要使用jQuery的
.live()
.delegate()
(jQuery 1.6或更早版本)或jQuery的
.on()
(jQuery 1.7+)。

您应该使用/来处理类。此外,CSS类名不能以数字()开头,而应尝试使用.live()。我会说“您应该使用.on()(或.delegate())”。由于.delegate()是在1.4.2中添加的,因此不应再提及.live(),因为它已被弃用。谢谢@DidierG。我不知道那件事。根据您的评论进行更新。
.live()
已被弃用,甚至不应再被提及这是真的,但如果他使用的是旧版jQuery,.on()将暂时不可用。
.delegate()
.on()
)的前身是在1.4中添加的,现在有点旧;-)