我正在创建一个函数来查找我搜索的演员制作的所有电影,这些电影都是这样的js文件:
var filmlist = [
{"Title":"Killer's Kiss", "Actors":"Frank Silvera, Jamie Smith, Irene Kane, Jerry Jarrett"}
];
var a = document.getElementById("film");
function findActors() {
var x = document.getElementById("actor").value;
var y = document.getElementById("actorfilm");
a.innerHTML = "Movies with this actor: "
for (var i=0; i<filmlist.length; i++) {
if (x.indexOf(filmlist[i].Actors) !== -1) {
y.innerHTML = (filmlist[i].Title + "<br/>")
}
}
}
&#13;
<textarea rows="2" cols="50" id="actor" placeholder="write actor name, and press the button"></textarea>
<button onclick="findActor()">ActorButton</button>
<p id="film"></p>
<p id="actorfilm"></p>
&#13;
出于某种原因,它不会显示演员,但它显示了第一个a.innerhtml 我是javascript的新手,所以任何帮助都表示赞赏。
答案 0 :(得分:2)
你几乎就在那里,只是你的if
状况需要逆转。
if (filmlist[i].Actors.indexOf(x) )
你是检查你输入的值中的actor的超集,而不是反过来这样做。
您可以通过
使其更精确var filteredFilms = filmlist.filter( s => s.Actors.indexOf(x) != -1 );
var output = filteredFilms.map( s => s.Title ).join( "<br/>" );
<强>演示强>
var filmlist = [{
"Title": "Killer's Kiss",
"Actors": "Frank Silvera, Jamie Smith, Irene Kane, Jerry Jarrett"
}];
var a = document.getElementById("film");
function findActors() {
var x = document.getElementById("actor").value;
var y = document.getElementById("actorfilm");
a.innerHTML = "Movies with this actor: "
var filteredFilms = filmlist.filter(s => s.Actors.indexOf(x) != -1);
y.innerHTML = filteredFilms.map(s => s.Title).join("<br/>");
}
<!-- find actor function -->
<textarea rows="2" cols="50" id="actor" placeholder="write
actor name, and press the button">Frank Silvera</textarea>
<button onclick="findActors()">ActorButton</button>
<p id="film"></p>
<p id="actorfilm"></p>
答案 1 :(得分:0)
您目前正在使用上一个电影标题覆盖y.innerHTML
。要附加到innerHTML使用:
y.innerHTML += (filmlist[i].Title + "<br/>")
indexOf存在问题,在另一个答案中提到,可以使用
修复 if (filmlist[i].Actors.indexOf(x)) {
最后,您的HTML错误地引用了js函数,而应该是:
<button onclick="findActors()">ActorButton</button>