我用最少量的代码重新创建了我的问题Lol
基本上,我有一个使用addEventListener
的iFrame,使用用户通过表单发布的数据。它运行良好,直到用户再次发布,然后存在2个EventListeners。我尝试过使用removeEventListener
,但在这种情况下这不起作用。
以下是我为重现问题所做的工作:
<HTML>
<HEAD>
<script>
function startListener() {
parent.document.removeEventListener('mouseup',outputInput,false);
parent.document.addEventListener('mouseup',outputInput,false);
}
function outputInput() {
console.log('<?php echo $_POST['input']; ?>');
}
</script>
</HEAD>
<BODY onload='startListener()'>
</BODY>
</HTML>
<iframe name="bufferiframe" id="bufferiframe"></iframe>
<form name="Test" method="POST" action="TESTbuffer.php" target="bufferiframe">
<input type="text" name="input">
<input type="submit" value="Go">
</form>
如果您按照以下步骤操作会发生什么:
我也试过这个函数:
function startListener() {
parent.document.addEventListener('mouseup',outputInput,false);
parent.document.removeEventListener('mouseup',outputInput,false);
parent.document.addEventListener('mouseup',outputInput,false);
}
具有相同的结果
任何帮助表示赞赏:D
答案 0 :(得分:0)
您需要从文档中清除所有mouseup
个事件。在这里,您有2个选项。
选项1:使用jQuery,但是很干净:
使用
function startListener() {
$(parent.document).off('mouseup');
$(parent.document).on('mouseup', function () {
// do event handler stuff here
});
}
进入TESTbuffer.php
。
选项2:不使用jQuery,但是很脏:
使用此(written by me, with no help whatsoever):
var el = parent.document.body,
elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);
在TESTbuffer.php
中,并将您的活动附加到body
而不是文档:
parent.document.body.addEventListener('mouseup', outputInput, false);