2013-11-03 88 views
0

我有一个通过php加载的页面。该页面中的一个元素是一个<li>,它有一个onclick事件。例如。 <li onclick="dynamiccall('1');">blah</li>。点击该元素后,会发出ajax调用,并将html输出插入到页面中,该标记的外观如下<li onclick="getubilling('1');">blah</li>Ajax请求生成可能用于后续Ajax请求的html。辅助请求返回[object mouseevent]而不是生成的值

使用onclick函数getubilling('1')单击生成的元素后,ajax调用被发送到php脚本。第二个getubilling函数中的查询参数显示为1,但在传递给ajax调用时,它显示为[object mouseevent]。这是为什么发生?

的dynamiccall()函数定义为在ajax.js文件遵循包含在页面:

function dynamiccall(uid){ 
    var xmlHttp = getXMLHttp(); 
     xmlHttp.onreadystatechange = function() 
     { 
     if(xmlHttp.readyState == 4) 
     { 
      HandleResponse10(xmlHttp.responseText); 
      console.log(uid); 
      var holder = uid; 
      document.getElementById('orgcinfo').innerHTML = '<ul id="b_action_lst2"><li onclick="getuprofile('+holder+')" name="uprofile">Account Settings</li><li onclick="getubilling('+holder+')" name="billing">Billing</li><li onclick="getuchpass('+holder+')" name="chpass">Change Password</li><li onclick="getuadduser('+holder+')" name="adduser">Add User</li></ul>'; 

      var ullist = document.getElementById('b_action_lst2'); 
      var links = ullist.getElementsByTagName('li'); 

      for(var i=0;i<links.length;i++){ 
      var link = links[i]; 
      if(link.getAttribute('name')=="uprofile"){ 
       link.onclick = getuprofile; 
      } 
      if(link.getAttribute('name')=="chpass"){ 
       link.onclick = getuchpass; 
      } 
      if(link.getAttribute('name')=="billing"){ 
       link.onclick = getubilling; 
      } 
      } 
      //dothis(); 
     } 
     } 
     xmlHttp.open("GET", "ajax.php?&p=anotherreq&uid="+uid+"&n="+Math.random(), true); 
     xmlHttp.send(null); 
    } 


function getubilling(uid){ 
var xmlHttp = getXMLHttp(); 
    xmlHttp.onreadystatechange = function() 
    { 
    if(xmlHttp.readyState == 4) 
    { 
     HandleResponse10(xmlHttp.responseText); 
     console.log(uid); 
     var holder = uid; 
     document.getElementById('orgcinfo').innerHTML = '<ul id="b_action_lst2"><li onclick="getuprofile('+holder+')" name="uprofile">Account Settings</li><li onclick="getubilling('+holder+')" name="billing">Billing</li><li onclick="getuchpass('+holder+')" name="chpass">Change Password</li><li onclick="getuadduser('+holder+')" name="adduser">Add User</li></ul>'; 

     var ullist = document.getElementById('b_action_lst2'); 
     var links = ullist.getElementsByTagName('li'); 

     for(var i=0;i<links.length;i++){ 
     var link = links[i]; 
     if(link.getAttribute('name')=="uprofile"){ 
      link.onclick = getuprofile; 
     } 
     if(link.getAttribute('name')=="chpass"){ 
      link.onclick = getuchpass; 
     } 
     if(link.getAttribute('name')=="billing"){ 
      link.onclick = getubilling; 
     } 
     } 
     //dothis(); 
    } 
    } 
    xmlHttp.open("GET", "ajax.php?&p=gubilling&uid="+uid+"&n="+Math.random(), true); 
    xmlHttp.send(null); 
} 

甲请求发出到http://www.domain.com/ajax.php?&p=gubilling&uid=1&n=2212.32313

的问题是,所得到的UID变量时在浏览器结果呈现[object mouseevent],而不是文字值1.

我跟着这example唯一的区别,我可以看到的是,该示例不提供 将动态元素传递给我所在的dynamicEvent函数。

我错过了什么?任何建议表示赞赏。

+0

几个问题:你为什么要使用内联JS,而你为什么不使用jQuery中提供的'.ajax'方法,因为您已将问题标记为这样? – Terry

回答

0

我怀疑这将是传递给onclick处理函数的事件对象的默认参数。

为什么不使用addEventListener作为开始而不是内联?

0

这是怎么回事:

dynamiccall('uniqueid');

知道uniqueid的价值是什么?它从哪里得到?在这种情况下,它将采取发生的事件的值。我的建议是改变标签看起来像这样:

<li onclick="dynamiccall(this);" uniqueid="1">blah</li> 

那么你可以dynamiccall设置为:

function getubilling(elem) { 
    var uid = $(elem).attr('uniqueid'); 
... 
+0

在服务器上生成了html,包括onclick =“”。当我点击元素dynamiccall('1');并且其功能被执行并且onclick方法被附加到列表项。当我尝试使用onclick处理程序执行生成的项目时,它会给我[对象mouseevent]而不是原始值1. – user2355051

+0

基本上我希望有一个ajax请求使用包含另一个Ajax请求的html填充文档。第二个ajax请求函数中的变量包含第一个ajax函数的变量。 – user2355051