“Javascript错误”;e、 预防默认值()&引用;这不是一个函数

“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

我已经一个小时没找到我的错误在哪里了。此外,我相信这是一个愚蠢的问题。总之,这是我的javascript代码:

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);
}