0

我有一个通过 php 加载的页面。页面中的元素之一是<li>具有 onclick 事件的 a。例如<li onclick="dynamiccall('1');">blah</li>。单击该元素后,将发出 ajax 调用并将 html 输出插入到页面中,标签如下所示<li onclick="getubilling('1');">blah</li>

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

页面中包含的 ajax.js 文件中的 dynamiccall() 函数定义如下:

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。

我正在关注这个示例 ,我能看到的唯一区别是该示例没有提供将动态元素传递给我的动态事件函数的功能。

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

4

2 回答 2

0

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

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

于 2013-11-03T00:15:03.510 回答
0

这是如何做到的:

动态调用('uniqueid');

知道 uniqueid 的值是什么吗?它是从哪里得到的?在这种情况下,它采用发生的事件的值。我的建议是将标签更改为如下所示:

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

然后您可以将 dynamiccall 设置为:

function getubilling(elem) {
    var uid = $(elem).attr('uniqueid');
...
于 2013-11-03T00:17:56.467 回答