当前位置: 首页 > 知识库问答 >
问题:

在jquery click事件中,如果所有div都有相同的类,如何从多个div中选择一个div?

颜骁
2023-03-14

我有一个带有类.display_notidiv并且在它里面有一个append另一个带有类.palnotificdiv。我从数据库中提取了数据,并将提取的数据转换为json_encode。我使用了那个json格式的数据,并在那个带有类.palnotific的div上生成了一些信息,这些信息是append

我第一个jquery代码用类.display_noti在div中追加数据,该代码如下所示:-

  $.getJSON("notification.php",function(data){  
    // you can do checking here
    if ( data.result && data.result.length > 0 ) {
       $(".display_noti").empty(); // Clear out the div  
       $.each(data.result,function(){  
         $(".display_noti").append("<div class='palnotific'>You got a pal requet from <strong>"+this['from_user']+"</strong><br><span class='date'>"+this['notification_date']+"<form method='post'><input type='text' class='palid' value='"+this['pals_id']+"'></form></div>");
       }); 
       done();
    }
    else {
          $(".display_noti").append("<div class='palnotific' style='background-color:white;'>You have no notification to view.</div>");
    } 

在上面,我首先获得了json格式的数据,并进行了一些验证,然后最后我用类.palnotific在第一个div中附加了第二个div并用类.display_noti

我们知道.palnotific是一个附加的div,我想在上面使用一些Onclick事件函数,所以我使用了下面的代码:-

   $('body').on('click','.palnotific',function(){
   var x = $(this).closest('.display_noti').find('.palid');
   var pid=x.val();  
  $.ajax({
    url:'notifipro.php',
    type:'post',
    data:"palid="+pid,
    success: function(data){
      if(data==1)
        {
         $(window).load('oldpage.php');
        }
      if(data==2)
         {
            $(window).load('newpage.php');
         } 

  } 
  });

});

上面的代码从.palnotificdiv中的表单中获取输入值,该表单是以前从jquery中追加的。正如您所知,那些追加的div通过json_encode从数据库中携带数据。它将获取数据库中可用的值,这意味着如果数据库中有2个数据,json_encode也将有2个数据,并且那些从json_encode中获取数据的append div类将用一个类palnotific追加2次该div。现在我的问题是,如果我有两个div的类palnotifi来自当我单击第二个div时,onclick函数不起作用。无论我有2个或更多的div但如果我单击任何一个div第一个div click函数采取行动。我如何使workonclick函数只对那些已经单击的div?

共有2个答案

吕飞翼
2023-03-14

从你粘贴的代码来看,问题应该出在这一行:

var pid=x.val(); 

您可以在jQuery文档(http://api.jQuery.com/val/)中找到

.val()获取匹配元素集合中第一个元素的当前值或设置每个匹配元素的值。

郑曜灿
2023-03-14

让jquery对动态创建的元素做出反应的最简单的方法是将事件附加到该元素本身。另一种方法是在带有子过滤器的容器div上使用on,但由于您已经创建了html,您可以将其封装在$('yourhtml')中,并将单击直接附加到创建的元素。结合appendTo而不是append,您还可以将append链接起来,然后单击:

//mock data:
var data={result: [
          {from_user: 'A',  notification_date: new Date(), pals_id: 1},
          {from_user: 'B',  notification_date: new Date(), pals_id: 2},
          {from_user: 'C',  notification_date: new Date(), pals_id: 3} 
]};


$.each(data.result,function(){  
        var id = this.pals_id;
         $("<div class='palnotific'>You got a pal request from <strong>"+this['from_user']+"</strong><br><span class='date'>"+this['notification_date']+"<form method='post'><input type='text' class='palid' value='"+ id +"'></form></div>")
         .appendTo(".display_noti")
         .click(function(){
             //attach pre existing function or assign your logic here
            alert('You clicked '  + id);
        })
});

小提琴示例

在本例中,id也是预先存储的,并在附加的click中重用。如果需要使用原始值,可以使用$(this).find('.palid').val()(如在this fiddle中所做的那样)

 类似资料:
  • 问题内容: 在将此标记为重复之前,我希望您认识到,实际上没有人为这个特定问题提供好的答案。在焦点/单击时选择contenteditable div中的所有文本时,接受的答案和TimDown的答案都无济于事,因为它们仅在元素已被聚焦时才起作用。就我而言,我希望单击一个按钮后即可选择contenteditablediv中的所有文本,即使该div事先未聚焦。 我该怎么办? 问题答案: 我使用了该线程中的

  • 当我使用时,我的代码只能选择代码中的第一个跨距。我得到一个错误TypeError:在“Node”上执行“Insert Before”失败:参数2不是“Node”类型。在HTMLDivelement。 现在任何人都可以帮助我选择卡片中的所有跨度,我也有很多卡片包含跨度 JS HTML

  • 各位早上好,我正在创建一个产品销售系统,这个话题会有点长,因为我想好好解释一下。 正在用Vaadin+MySQL+springboot+Maven开发的系统 在主屏幕上,我们有一个网格,上面有“新建”、“更改”和“删除”按钮: 当点击new按钮时,将打开一个窗口,开始“销售”产品: 这里的问题是这样的,当我点击“+项”时会出现以下情况: 问题:创建了一个滚动条(在窗口的右边),保存、关闭和+项按钮

  • 我有几个具有相同类()的div。 我想在div上执行和, 这里的问题是,该函数适用于所有具有该类的DIV,而不仅仅是我放鼠标的那个。 有什么想法吗? null null

  • 问题内容: 我想将居中。但是,事实并非如此。我只想找出原因以及如何使其居中。 问题答案: 您需要设置容器的宽度。(不起作用) MDN的CSS参考说明了这一切。

  • 问题内容: 我有很多表具有相同的列“ customer_number”。我可以通过查询获取所有这些表的列表: 问题是如何从所有这些表中获取具有特定客户编号的所有记录,而不对每个表运行相同的查询。 问题答案: 我假设您要自动执行此操作。两种方法。 SQL生成SQL脚本 。 PLSQL 使用动态sql的类似想法: