使用onClick(event)搜索DOM元素的属性不起作用

时间:2019-07-06 09:08:05

标签: javascript html

我正在使用服务器提供的唯一ID以编程方式创建DOM元素。单击它们之一时,需要获取名为posterId的属性。

我正在尝试通过当前无效的活动。

我尝试使用:

  • onClick="handlePosterClick(event)

  • onClick="handlePosterClick(this)

  • onClick=handlePosterClick(this.posterId)

此函数生成组成整个块的所有Divs和元素:

function createMovieDivForCarrousel(){
    var carrousel = '';
    for(var j = 0; j < movieGenres.length; j++){
        //creates a slider, section title and defines mouseovers
        carrousel += '<div class="slider"><h3>'+movieGenres[j]+'</h3><span onmouseover="scrollL()" onmouseout="clearScroll()" class="handle handlePrev active"><i class="fa fa-caret-left" aria-hidden="true"></i></span><div id="scroller" class="row"><div class="row__inner">';
        for(var i = 0; i < recommendedMovies.length; i++){
            if(recommendedMovies[i].genre[0].toLowerCase() == movieGenres[j].toLowerCase()){
                carrousel +='<div class="gui-card"><div class="gui-card__media"><img class="gui-card__img" src="'+recommendedMovies[i].poster+'"/></div><div class="gui-card__details" "posterId="'+recommendedMovies[i].id+'" onClick="handlePosterClick(event)"><div class="gui-card__title">'+recommendedMovies[i].title+'</div></div></div>';
            }
        }
        carrousel += '</div></div><span onmouseover="scrollR()" onmouseout="clearScroll()"  class="handle handleNext active"><i class="fa fa-caret-right" aria-hidden="true"></i></span></div>';
    }
    return carrousel;
}

此函数处理了它应该做的事情,我已取消了不必要的部分,但仅尝试记录该值也不起作用:

function handlePosterClick(e) { 
    var indexOfClicked = search(e.target.getAttribute("posterId"));
    posterArray[indexOfClicked].state = !posterArray[indexOfClicked].state;
}

window.onclick = e => {} 

同时包含ID和函数调用的元素是:

<div class="gui-card__details" "posterId="'+recommendedMovies[i].id+'" onClick="handlePosterClick(event)">

作为参考,ID从1到118,并且都是唯一的。


编辑:执行onClick="console.log(this)"并单击其中一个元素会显示以下内容:

<div class="gui-card__details" "posterid="11" onclick="console.log(this)"><div class="gui-card__title">Manchester by the Sea&nbsp;(2016)</div></div>

删除多余的双引号并使其为posterId而不是"posterId"也会产生Uncaught TypeError: Cannot read property 'state' of undefined。我不确定如何表示,这是代码段的最后状态。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用 document.getElementsByName(“ posterId”); 在handlePosterClick()里面

答案 1 :(得分:0)

2个问题: 1.多余的双引号引起了问题。它隐藏了一个不同的问题。首先,删除posterId之前的那些双引号。 2. search找不到索引,或者索引指向数组中的null / undefined。您需要调试代码的这两部分。