“Javascript错误”;e、 预防默认值()&引用;这不是一个函数
我已经一个小时没找到我的错误在哪里了。此外,我相信这是一个愚蠢的问题。总之,这是我的javascript代码:“Javascript错误”;e、 预防默认值()&引用;这不是一个函数,javascript,Javascript,我已经一个小时没找到我的错误在哪里了。此外,我相信这是一个愚蠢的问题。总之,这是我的javascript代码: var deleteRefsButton = document.getElementsByClassName('refs--item--delete'); var deleteRefs = function(e, i){ e.preventDefault(); e.parentNode.classList.add('deleted'); document.ge
var deleteRefsButton = document.getElementsByClassName('refs--item--delete');
var deleteRefs = function(e, i){
e.preventDefault();
e.parentNode.classList.add('deleted');
document.getElementById('deletedInput'.i).value = true;
}
for (var i=0;i<deleteRefsButton.length;i++){
var button = deleteRefsButton[i];
button.addEventListener('click', deleteRefs(button,i), false);
}
也许你看到了我的错误
提前感谢您javascript的基本原理有两个问题 使用
addEventListener
时,传入要触发的函数实例,但不执行它
button.addEventListener('click', deleteRefs, false);
然后,当侦听器被触发时,事件将作为第一个参数传入。这将解决preventDefault
未定义的问题
其次,您尝试执行getElementById('deletedInput'.i)
您尝试对字符串调用i
。这是无效的javascript。你要做的是:
getElementById('deletedInput' + i);
但是,i
将是未定义的,因为您不能像在addEventListener
中那样执行函数
我还想指出,执行此document.getElementById('deletedInput'.I)
将不起作用,因为您没有ID前缀为deletedInput
的元素。您可以使用querySelector
解决此问题。我已将此添加到我的示例中
最后我想指出,for循环从0开始。没有包含0的元素。当传递i
处理程序时,需要向i
添加1
我已经编辑了你的代码,你可以这样做。如果您有问题,可以参考developer.mozilla.org。你可以复制和粘贴这个,它会工作
var deleteRefsButton = document.getElementsByClassName('refs--item--delete');
var deleteRefs = function(){
// The arguments object is an Array-like object corresponding to the arguments passed to a function.
var i = arguments[0];
var e = arguments[1];
e.preventDefault();
e.currentTarget.parentNode.classList.add('deleted');
document.querySelector('[name="deleted' + i + '"]').value = true;
}
for (var i=0; i < deleteRefsButton.length; i++){
var button = deleteRefsButton[i];
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
// .bind will prepend i the the list of arguments passed to deleteRefs
button.addEventListener('click', deleteRefs.bind(this, i + 1), false);
}
var deleteRefsButton=document.getElementsByClassName('refs--item--delete');
var deleteRefs=函数(){
//arguments对象是与传递给函数的参数相对应的类似数组的对象。
变量i=参数[0];
var e=参数[1];
e、 预防默认值();
e、 currentTarget.parentNode.classList.add('deleted');
document.querySelector('[name=“deleted'+i+'“]')。value=true;
}
对于(变量i=0;i
您期望得到什么?您正在将按钮作为e
参数传递。请参阅此线程。希望有帮助。另外,您实际上并没有绑定事件侦听器。@Nimrod与此问题无关。他拼写正确。谢谢@Oriol,我有点累了(现在是凌晨3:20,在法国),我会把javascript放在一边,然后直接上床睡觉:D.感谢大家的帮助。非常感谢你们在教学方面的帮助。我是javascript和php等编程语言的初学者。我会耐心地研究你的解决方案来学习。(注:对于连接错误,这是因为我从php切换到javascript)我还想指出,在类名中的单词之间使用一个连字符是更好的做法。
getElementById('deletedInput' + i);
var deleteRefsButton = document.getElementsByClassName('refs--item--delete');
var deleteRefs = function(){
// The arguments object is an Array-like object corresponding to the arguments passed to a function.
var i = arguments[0];
var e = arguments[1];
e.preventDefault();
e.currentTarget.parentNode.classList.add('deleted');
document.querySelector('[name="deleted' + i + '"]').value = true;
}
for (var i=0; i < deleteRefsButton.length; i++){
var button = deleteRefsButton[i];
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
// .bind will prepend i the the list of arguments passed to deleteRefs
button.addEventListener('click', deleteRefs.bind(this, i + 1), false);
}