【问题标题】:Assign click to dynamically created data from database将点击分配给从数据库中动态创建的数据
【发布时间】:2016-04-11 08:17:28
【问题描述】:

我已经创建了 javascript,其中为删除的元素获取数据并创建。使用 json 编码从数据库中获取数据。我已经为元素分配了 id,但是每个元素的点击事件都不起作用。仅获取最后一个元素 id 并在该 id 上执行单击。

JS:

$(document).ready(function () {
var i,j=0;
var x1,x2,y1,y2;
var sf=pf;
sf=Math.round(sf);
var tmp;
var y=null;
var idiv=[];
var fty=ft;
var fd=fid;
var fetch=data;
var x = null;
var count=fetch['count'];
var i=count+1;
//document.write(count);
var rai=[];
//rai[0]='hello';
//document.write(rai[0]);
var ww=[];
var hh=[];
var xx=[];
var yy=[];
var room=[];
var roomt=[];
for(j=0;j<=count;j++)
{

    rai[j]=fetch['room_id'+j];
    //document.write(rai[j]);
    ww[j]=fetch['width'+j];
    //document.write(ww[j]);
    hh[j]=fetch['height'+j];
    xx[j]=fetch['x'+j];
    yy[j]=fetch['y'+j];
    room[j]=fetch['room'+j];
    roomt[j]=fetch['roomt'+j];
    //document.write(room[j]);
   // alert("data"+rai+"  "+ww+" "+hh+" "+xx+" "+yy);
    idiv[j]=document.createElement('img')
    $('#droppable').append(idiv[j]);
    idiv[j].style.position="absolute";
    idiv[j].style.left=(xx[j]*sf)+'px';
    idiv[j].style.top=(yy[j]*sf)+'px'; 
    idiv[j].style.width=(ww[j]*sf)+'px';
    idiv[j].style.height=(hh[j]*sf)+'px';
    idiv[j].style.border=1+'px';
    idiv[j].id=room[j];
    //y=idiv[j].attr('idd',rai[j]);
        if(roomt[j]=='garden')
    {
        idiv[j].src="images/download.jpg";
    }
    else
    { 
        idiv[j].src="images/ac.png"
    }
    $(idiv[j]).draggable();
    //alert(y);
    //y=idiv[j].id;
//  alert(y);

//document.write("data"+rai[j]+"  "+(ww[j]*sf)+" "+(hh[j]*sf)+" "+(xx[j]*sf)+" "+(yy[j]*sf) + room[j]);
}
//$(this).bind("click",'idiv',function(){
//          alert("hello"+idiv.id);
//window.location.href="tables.php?room_id="+y;
//  });
});

谁能告诉我如何绑定点击每个提取的元素。

【问题讨论】:

  • id 在同一个文档中应该是唯一的,如果您有重复的,请按类替换它们。

标签: javascript php jquery drag-and-drop


【解决方案1】:

Ty this :将类添加到创建的元素,并为所有具有该类的元素编写单击事件处理程序。见下文

在你创建idiv[j]的循环中添加下面的html -

idiv[j].className = "clickable";

现在使用 .on()

编写一个点击事件处理程序
$(document).ready(function () {
    ...... your code start here
    ......
    //loop
    for(j=0;j<=count;j++)
   { 
    ...
    ...
   }
   //loop ends
   ... more code
   ....your code end here
    $(document).on("click",".clickable", function(){
         alert(this.id);
    });
});

注意:不要使用bind,因为在 jQuery 1.5 版之后它现在已被弃用

【讨论】:

  • 类名被分配,我应该在哪里写点击我在内部和外部都尝试了 for 循环但没有任何工作。还有其他想法吗?
  • 我使用了 bind 而不是 on,它可以工作,但它没有得到元素的 id,它变得未定义。
  • 在循环外部写入点击事件处理程序,但在$(document).ready... 块内部。查看我的更新答案
  • 我在循环外写的,但它没有得到 id。
  • 对不起,它现在起作用了。我犯了一些错误,将 className 写为 classname。感谢您的帮助
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2018-02-13
  • 2019-02-03
相关资源
最近更新 更多