【问题标题】:Searching for actors JS寻找演员 JS
【发布时间】:2018-05-06 08:46:12
【问题描述】:

我正在创建一个函数来查找我搜索的演员制作的所有电影,这些电影在一个 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/>")
    }
  }
}
<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>

由于某种原因,它不会显示演员,但会显示第一个 a.innerhtml 我对 javascript 非常陌生,因此不胜感激。

【问题讨论】:

  • 你在 textarea 中输入了什么?
  • 你在html中写了findActor,在js中写了findActors
  • 请参阅JSFiddle,了解使用您的代码的工作示例。

标签: javascript for-loop innerhtml


【解决方案1】:

您快到了,只是您的if 条件需要反转。

if (filmlist[i].Actors.indexOf(x) )

您是在在您输入的值内检查演员的超集,而不是反其道而行之。

你可以做的更精确

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>

【讨论】:

  • 仍然无法通过反转索引将其打印出来:/
  • @GustavBangNielsen 查看演示。
  • 我将 for 和 if 循环更改为您的解决方案,并将 indexOf 反转,仍然没有结果..
【解决方案2】:

您当前正在用最后一个电影标题覆盖y.innerHTML。要附加到innerHTML,请使用:

y.innerHTML += (filmlist[i].Title + "&lt;br/&gt;")

您的 indexOf 存在问题,在另一个答案中提到,可以用

修复

if (filmlist[i].Actors.indexOf(x)) {

最后,您的 HTML 错误地引用了 js 函数,而应该是:

&lt;button onclick="findActors()"&gt;ActorButton&lt;/button&gt;

【讨论】:

  • 虽然你是对的,但这不是 OP 面临的问题。
  • 正如@Adriani6 提到的,最初的问题是您的 if 语句比较字符串上的 indexOf,而不是数组。现在检查我的答案,或 gurcinder372 的答案
  • 是的,我都改了,还是没有结果
  • 检查您原始帖子中的 cmets,当您的 JS 函数为 findActors() 时,您的 HTML 中似乎是 findActor() 的拼写错误
  • 啊抱歉打错了,很好发现!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2020-06-21
  • 2015-09-08
  • 2015-06-24
  • 2011-05-05
相关资源
最近更新 更多