Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 更改element.innerHTML后,MooTools事件侦听器将消失_Javascript_Ajax_Events_Mootools - Fatal编程技术网

Javascript 更改element.innerHTML后,MooTools事件侦听器将消失

Javascript 更改element.innerHTML后,MooTools事件侦听器将消失,javascript,ajax,events,mootools,Javascript,Ajax,Events,Mootools,我正在尝试使用MooTools来完成这项任务 说明: 我在myButton链接上附加了一个事件侦听器。单击此链接将启动AJAX请求,并根据响应文本更新内容。 在这个请求过程中,一个POST变量被发送到“button.php”,但它目前没有被使用。(我希望稍后使用它) 好的,因此,myDiv获得了完全相同的链接,具有相同的ID(myButton)+一个随机数,这样我们就可以看到每次单击都会生成一个新的数字 问题: 第一次单击myButton后,myDiv会正确更新,显示一个随机数。当我第二次单击m

我正在尝试使用MooTools来完成这项任务

说明:

我在
myButton
链接上附加了一个事件侦听器。单击此链接将启动AJAX请求,并根据响应文本更新内容。

在这个请求过程中,一个POST变量被发送到“button.php”,但它目前没有被使用。
(我希望稍后使用它)

好的,因此,
myDiv
获得了完全相同的链接,具有相同的ID(
myButton
)+一个随机数,这样我们就可以看到每次单击都会生成一个新的数字

问题:

第一次单击
myButton
后,
myDiv
会正确更新,显示一个随机数。当我第二次单击
myButton
时(这次是在新更新的div中),div不再刷新。

请注意,我需要
myButton
位于
myDiv
内,并且每次单击后都必须更新(刷新)
myDiv
,而不必刷新整个页面

有人能告诉我如何基于这个简化的代码示例实现这个任务吗


index.html

<html>
<head>
<script type="text/javascript" src="mootools-1.2.4-core-nc.js"></script>
<script>
window.addEvent('domready', function() {
  $('myButton').addEvent('click', function(e) {
    e.stop();
    var myRequest = new Request({
      method: 'post',
      url: 'button.php',
      data: {
        action : 'test'
      },
      onRequest: function() {
        $('myDiv').innerHTML = '<img src="images/loading.gif" />';
      },
      onComplete: function(response) {
        $('myDiv').innerHTML = response;
      }
    });
    myRequest.send();
    $('myButton').removeEvent('click');
  });
});
</script>
</head>
<body>
  <div id="myDiv">
    <a id="myButton" href="#">Button</a>
  </div>
</body>
</html>

addEvent('domready',function(){
$('myButton').addEvent('click',函数(e){
e、 停止();
var myRequest=新请求({
方法:“post”,
url:'button.php',
数据:{
行动:“测试”
},
onRequest:function(){
$('myDiv')。innerHTML='';
},
未完成:功能(响应){
$('myDiv')。innerHTML=响应;
}
});
myRequest.send();
$('myButton')。removeEvent('click');
});
});
button.php

<a id="myButton" href="#">Button</a> clicked <?php echo rand(1,100); ?>
单击


您正在将事件附加到要替换的元素。dom无法知道对您来说,旧按钮和新按钮是相同的。将删除旧按钮(及其事件侦听器),并创建新按钮。因此,您需要将事件重新附加到新按钮

也就是说:为什么按钮必须在div中?令人难以置信。您可以随时从javascript更新按钮文本,无需替换它并继续创建新的侦听器对象。

查看一次,在
myDiv
容器上设置事件,这样您就不必每次更新内容时都重新附加处理程序。您需要在脚本中包含更多的扩展,因为它还不是core的一部分,但将从版本1.3开始

$("myDiv").addEvent("click:relay(a)", function() {
    ...
);

如果您有多个
,每5秒更换一次链接。在
myDiv
容器上只有一个事件设置,它处理所有
的所有点击,甚至是动态点击。

如果您只想显示加载内容,请添加一个包含加载图像的div并切换其可见性。ootools似乎有点像jQuery“delegate”。我希望按钮位于div中,因为我需要为特定目标在该div中放置更多按钮。按钮将被调用,例如“添加”、“编辑”、“删除”。它们中的每一个都会将特定的功能加载到这个div中。我仍然会通过javascript以编程的方式来实现这一点。保留按钮的哈希表。动态隐藏、创建和显示它们。这样,事件侦听器就可以重复使用。+1用于显示代码、描述预期行为和描述错误行为(而不是“不起作用”)。
<a class="updateTrigger" id="myButton" href="#">Button</a>
$("myDiv").addEvent("click:relay(a.updateTrigger)", function() {
    ...
});