Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以更改循环中的索引吗?_Javascript_Jquery_For Loop_Each_Html5 Audio - Fatal编程技术网

Javascript 我可以更改循环中的索引吗?

Javascript 我可以更改循环中的索引吗?,javascript,jquery,for-loop,each,html5-audio,Javascript,Jquery,For Loop,Each,Html5 Audio,我有一系列s,每个都有一个颜色名称的id,例如,它加载一个音频文件,并用艺术家和曲目标题填充几个标题标签,这些标题标签是在单击div时从ajax调用中收集的 <div class="songs"></div> <div id="play" onclick="document.getElementById('song').play()"></div> <div> <h2 id="title"></h

我有一系列
s,每个都有一个颜色名称的id,例如
,它加载一个音频文件,并用艺术家和曲目标题填充几个标题标签,这些标题标签是在单击div时从ajax调用中收集的

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
HTML

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
我是否可以使用for循环或
$。每个
而不是重复相同的代码并手动更改19个项目中每个项目的div id和项目索引?

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
这是我的垃圾箱,我在这里计算:

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
相关HTML:

<div id="play" onclick="document.getElementById('song').play()"></div>
  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 

我不完全确定您想要什么,但这应该会让您走上正确的方向

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
Html

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 

然后使用Javascript/jQuery

var html = '';
//Create a div for each fetched song
$.each(data, function(index,item){
  html += '<div class="song" data-song-id="'+index+'" data-artist="'+item.artist+'" data-src="'+item.songSrc+'"></div>';
});
// and add them to the div element with the class songs
$('.songs').html(html);

//Listen to clicks on all divs with the class song
$('.songs').on('click', '.song' function(e){
  var $this = $(this);
  var songId = $this.data('song-id');
  var artist = $this.data('artist');
  var src = $this.data('src');
  $("#song").attr('src',src);
})
  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
var html='';
//为每个获取的歌曲创建一个div
$。每个(数据、功能(索引、项目){
html+='';
});
//并将它们与类歌曲一起添加到div元素中
$('.songs').html(html);
//听全班歌曲中所有div的点击
$('.songs')。在('click','.song'函数上(e){
var$this=$(this);
var songId=$this.data('song-id');
var artist=$this.data('artist');
var src=$this.data('src');
$(“#宋”).attr('src',src);
})

我不完全确定您想要什么,但这应该会让您走上正确的方向

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
Html

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 

然后使用Javascript/jQuery

var html = '';
//Create a div for each fetched song
$.each(data, function(index,item){
  html += '<div class="song" data-song-id="'+index+'" data-artist="'+item.artist+'" data-src="'+item.songSrc+'"></div>';
});
// and add them to the div element with the class songs
$('.songs').html(html);

//Listen to clicks on all divs with the class song
$('.songs').on('click', '.song' function(e){
  var $this = $(this);
  var songId = $this.data('song-id');
  var artist = $this.data('artist');
  var src = $this.data('src');
  $("#song").attr('src',src);
})
  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
var html='';
//为每个获取的歌曲创建一个div
$。每个(数据、功能(索引、项目){
html+='';
});
//并将它们与类歌曲一起添加到div元素中
$('.songs').html(html);
//听全班歌曲中所有div的点击
$('.songs')。在('click','.song'函数上(e){
var$this=$(this);
var songId=$this.data('song-id');
var artist=$this.data('artist');
var src=$this.data('src');
$(“#宋”).attr('src',src);
})

是的,你可以。您必须同时重构html和js。 在HTML中,您必须替换静态div,即具有id的div。相反,请使用一个容器来添加所有歌曲

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
在JS中,为每首歌曲创建DOM元素,并将其附加到歌曲容器中。在此之前,请确保所有元素都具有特定于歌曲数据的“单击”事件处理程序。利用“绑定”

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
HTML

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 

JS

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
myUrl='http://meyecare.herokuapp.com/api/v1/songs';
$(window).load(function(){
  $.ajax({ 
    url: myUrl,
    type: 'GET',
    dataType: 'jsonp',
    success: function(data) {
      $.each(data, function(index,item){
        var element = $( "<div id='" + item.color + "'></p>" );
        element.on('click', function(){
          $("#song").attr('src',this.songSrc);
          $("h2").html(this.title);
          $("h3").html(this.artist);
        }.bind(item)); 
        element.appendTo(".songs");    
      }); 
    }, 
    error: function(){
      console.log('Shnope!');
    },
  });
});
myUrl='1!'http://meyecare.herokuapp.com/api/v1/songs';
$(窗口)。加载(函数(){
$.ajax({
url:myUrl,
键入:“GET”,
数据类型:“jsonp”,
成功:功能(数据){
$。每个(数据、功能(索引、项目){
var元素=$(“

”);
  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
元素上('click',function()){ $(“#song”).attr('src',this.songSrc); $(“h2”).html(此标题); $(“h3”).html(this.artist); }.绑定(项目)); 元素。追加到(“歌曲”); }); }, 错误:函数(){ console.log('Shnope!'); }, }); });
是的,你可以。您必须同时重构html和js。 在HTML中,您必须替换静态div,即具有id的div。相反,请使用一个容器来添加所有歌曲

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
在JS中,为每首歌曲创建DOM元素,并将其附加到歌曲容器中。在此之前,请确保所有元素都具有特定于歌曲数据的“单击”事件处理程序。利用“绑定”

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
HTML

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 

JS

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
myUrl='http://meyecare.herokuapp.com/api/v1/songs';
$(window).load(function(){
  $.ajax({ 
    url: myUrl,
    type: 'GET',
    dataType: 'jsonp',
    success: function(data) {
      $.each(data, function(index,item){
        var element = $( "<div id='" + item.color + "'></p>" );
        element.on('click', function(){
          $("#song").attr('src',this.songSrc);
          $("h2").html(this.title);
          $("h3").html(this.artist);
        }.bind(item)); 
        element.appendTo(".songs");    
      }); 
    }, 
    error: function(){
      console.log('Shnope!');
    },
  });
});
myUrl='1!'http://meyecare.herokuapp.com/api/v1/songs';
$(窗口)。加载(函数(){
$.ajax({
url:myUrl,
键入:“GET”,
数据类型:“jsonp”,
成功:功能(数据){
$。每个(数据、功能(索引、项目){
var元素=$(“

”);
  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
元素上('click',function()){ $(“#song”).attr('src',this.songSrc); $(“h2”).html(此标题); $(“h3”).html(this.artist); }.绑定(项目)); 元素。追加到(“歌曲”); }); }, 错误:函数(){ console.log('Shnope!'); }, }); });
为什么不为所有颜色指定一个公共类,然后将对象索引存储在数据属性中。然后,只需单击一次事件即可填充正确的数据。大概是这样的:

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
$(“div.color”)。单击(函数(){
var索引=$(this.data('src');
$(“#宋”).attr('src',data[index].songSrc);
$(“h2”).html(数据[索引].title);
$(“h3”).html(数据[index].artist);
}); 

为什么不为所有颜色指定一个公共类,然后将对象索引存储在数据属性中。然后,只需单击一次事件即可填充正确的数据。大概是这样的:

  <div class="songs"></div>

  <div id="play" onclick="document.getElementById('song').play()"></div>
  <div>
    <h2 id="title"></h2>
    <h3 id="artist"></h3>
  </div> 
</div> 
$(“div.color”)。单击(函数(){
var索引=$(this.data('src');
$(“#宋”).attr('src',data[index].songSrc);
$(“h2”).html(数据[索引].title);
$(“h3”).html(数据[index].artist);
}); 


我想你基本上做错了
:(
@Praveen,你能说得更具体点吗?这是我仍在努力理解的。
:(
我想你根本做错了!
:(
@Praveen,你能说得更具体点吗?这是我仍在努力理解的。
:(
我认为OP希望增加用于访问
数据的索引
数组。在您的情况下,您将始终使用该数组中的相同项。$。每个函数将迭代响应数据并增加index@Andy我更新了代码问题,希望它有助于澄清问题。我不知道该如何表达我的问题。基本上我想使用一个循环(如果可能的话),因此我不必为页面上的19个div重复.click函数。上面的代码就是这样做的。在我们添加到dom的所有div上,您只有一个事件处理程序监听click事件。只要它有类名song,我想OP希望增加用于访问
数据的索引我将始终使用该数组中的相同项。$。每个函数将迭代响应数据并递增index@Andy我更新了密码问题,h