我在按钮上有一个带有 addEventListener 的非jquery脚本。这在第一次运行时工作正常但我希望在第一次点击后将“发送”更改为其他值。 (表单的成功插入成为更新表单)。但是,即使sendurl填充了新的id值,它也不会在事件再次触发后发生变化。而是通过第二次点击,它将新创建的事件与旧值一起激活。
console.log中的结果值:
所以我想摆脱第一次点击后触发的输入。有人知道如何解决这个问题吗?
var itemid = getHash();
ini(prepare); // using window.onload to execute
function prepare() {
if (itemid) {
// update
var sendingurl = 'update.php?io=items&id=' + itemid;
} else {
// input
var sendingurl = 'input.php';
}
// submitevent
æ($("submitBtn"), 'click', function() {
console.log("event \"click\" is fired with url: " + sendingurl);
var json = new FormData(document.forms[0]);
ajax(sendingurl, json, submittedInput);
});
}
// callback function after ajax did his magic
function submittedInput(response) {
if (response) {
if (!itemid) {
itemid = response;
prepare();
}
} else {
$("status").innerHTML = "something went wrong with the input";
}
}
// function to add events without the use of jquery or prototype
function æ(el, evType, fn, useCapture) {
if (el.addEventListener) {
el.removeEventListener(evType, fn, useCapture);
el.addEventListener(evType, fn, useCapture);
return true;
} else if (el.attachEvent) {
el.detachEvent('on' + evType, fn);
var r = el.attachEvent('on' + evType, fn);
return r;
} else {
el['on' + evType] = fn;
}
}
答案 0 :(得分:0)
第一次,没有要删除的事件处理程序,并且您的匿名函数被添加为事件处理程序。匿名函数创建为闭包,因此senturl的值现在是"常量"无论外部发送如何变化。这就是你获得旧价值的原因。
第二次,传递给removeEventListener的事件处理程序函数尚未绑定到事件,因为第二个匿名函数与第一次传递时的匿名函数不同。因此没有删除事件处理程序。然后使用新的匿名函数添加第二个事件,其中包含senturl的修订值。这就是为什么你看到这两个功能都会被激发的原因。
将您的匿名函数转换为普通函数,改为使用普通函数名称。