Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 使用Mootools';添加事件处理程序。addEvent()在某个地方神秘地失败_Javascript_Ajax_Mootools - Fatal编程技术网

Javascript 使用Mootools';添加事件处理程序。addEvent()在某个地方神秘地失败

Javascript 使用Mootools';添加事件处理程序。addEvent()在某个地方神秘地失败,javascript,ajax,mootools,Javascript,Ajax,Mootools,我在为一个web应用程序开发一些JS时遇到了一个相当令人难以置信的问题。不幸的是,我不能发布完整的代码,因为它是一个尚未发布的项目的一部分。这个问题让我和我问过的一些同事都感到困惑——据我所知,这应该是可行的 现在来看实际问题:用户在一些表单字段中输入一些信息并单击“确认”图像,然后将AJAX请求发送回服务器。服务器进行一些处理,然后返回一个带有状态和一些附加数据的响应。用户正在使用的模式对话框窗口中显示状态消息,并显示带有链接的图标。以下是Mootools Request.JSON对象的“on

我在为一个web应用程序开发一些JS时遇到了一个相当令人难以置信的问题。不幸的是,我不能发布完整的代码,因为它是一个尚未发布的项目的一部分。这个问题让我和我问过的一些同事都感到困惑——据我所知,这应该是可行的

现在来看实际问题:用户在一些表单字段中输入一些信息并单击“确认”图像,然后将AJAX请求发送回服务器。服务器进行一些处理,然后返回一个带有状态和一些附加数据的响应。用户正在使用的模式对话框窗口中显示状态消息,并显示带有链接的图标。以下是Mootools Request.JSON对象的“onComplete”处理程序,删除了一些错误条件处理:

  onComplete: function(response) {
    if (response) {
      if (response.status == 0) {
        // this means the request was successful
        licenses = response.licenses;
        updateControls();
        licenseList();
        // here I add the status message...
        $("createform_result").innerHTML = "<img src=\'/media/com_supportarea/images/db_success.png\' /> License created. Download:<br /><br />";
        // ...and the download "link"
        if (response.tlsid) {
          $("createform_result").innerHTML += "<a href=\"#\" id=\"newtlslic-"+response.tlsid+"\"><img src=\'/media/com_supportarea/images/download_small.png\' /></a> <em>TLS</em>";
          // this line is here for debugging only, to make sure this
          // block of code is run (it is) and the element is found (it is)
          $("newtlslic-"+response.tlsid).style.border = "1px solid red";
          $("newtlslic-"+response.tlsid).addEvent("click", function(e) {
            // I've stripped out all other code, also for debugging
            e.stop();
          });
        }
      }
    }
  }
onComplete:函数(响应){
如果(答复){
如果(response.status==0){
//这意味着请求成功
许可证=响应。许可证;
updateControl();
执照持有者();
//在这里我添加状态消息。。。
$(“createform_result”).innerHTML=“已创建许可证。下载:

”; //…和下载“链接” if(response.tlsid){ $(“createform_结果”).innerHTML+=“TLS”; //此行仅用于调试,以确保 //运行代码块(它是)并找到元素(它是) $(“newtllic-”+response.tlsid).style.border=“1px实心红色”; $(“newtllic-”+response.tlsid)。addEvent(“单击”,函数(e){ //我剥离了所有其他代码,也是为了调试 e、 停止(); }); } } } }
显示带有链接的消息和图标,应用样式(显示红色边框),Firefox或Chrome中均未显示错误消息。但是,单击图标会导致将#附加到URL(e.stop()不起任何作用)。根据EventBug插件,链接没有附加任何点击事件。似乎.addEvent()在这里什么都不做


现在,他们有一个重要的问题:为什么会这样?我该如何解决?救命啊

javascript中的字符串是不可变的。当你做以下事情时:

$("createform_result").innerHTML += "<a href=\"#\" id=\"newtlslic-"+response.tlsid+"\"><img src=\'/media/com_supportarea/images/download_small.png\' /></a> <em>TLS</em>";
事件委派现在是1.4.0中mootools核心的一部分,或者在以前的版本中更多地在mootools中


玩得开心

你帮我搞定了,谢谢!我确实在向innerHTML添加更多内容:但不是在循环中。在所有的HTML操作之后,我只是简单地移动了.addEvent调用,它成功了。
// add this once, outside the loop 
$("createform_result").addEvent("click:relay(a.editLink)", function(event, element) {
    console.log(this === element); 
    console.log(this === event.target);
    console.log(this.get("data-id"));
}); 

// then as you loop the results, just inject the els or use innerHTML or whatever...
new Element("a.editLink", {
    html: '<img src=\'/media/com_supportarea/images/download_small.png\' /></a> <em>TLS</em>',
    "data-id": response.tlsid
}).inject($("createform_result"));