Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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 单击函数影响jquery中具有相同类名的多个元素_Javascript_Jquery_Onclick - Fatal编程技术网

Javascript 单击函数影响jquery中具有相同类名的多个元素

Javascript 单击函数影响jquery中具有相同类名的多个元素,javascript,jquery,onclick,Javascript,Jquery,Onclick,我想在我的视频风格页面上自动播放youtube视频,即。我可以用下面给定的代码点击我的图像缩略图来自动播放视频。但是,这会影响页面中具有相同类的其他元素。我的代码是: jQuery( function($) { $('.cq-expandgrid-toggle').on('click', function(ev) { $("#pvideo")[0].src += "&autoplay=1"; ev.preventDefault(); }); }); &l

我想在我的视频风格页面上自动播放youtube视频,即。我可以用下面给定的代码点击我的图像缩略图来自动播放视频。但是,这会影响页面中具有相同类的其他元素。我的代码是:

jQuery( function($) {    
 $('.cq-expandgrid-toggle').on('click', function(ev) {
    $("#pvideo")[0].src += "&autoplay=1";
    ev.preventDefault(); 
  });
});
<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>

我怎样才能做到呢。我对“这个”对象有点困惑

我使用了一些伪代码来测试它

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
HTML

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
这是小提琴

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
所以你应该把代码改成

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
jQuery( function($) {    
 $('.cq-expandgrid-toggle').on('click', function(ev) {
    var pvideo = this.querySelector("#pvideo");
    pvideo.src += "&autoplay=1";
    ev.preventDefault(); 
  });
});
我不确定是否有更好的方法来编写这个
this.querySelector(“#pvideo”)

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
更新:

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
现在我对您的HTML代码有了一个大致的了解, 我尝试了下面的代码,这里有一些修改,你应该做你的HTML代码,使事情更容易

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
  • 确保
    cq expandgrid toggle
    cq expandgrid content
    位于父容器内。这将帮助我们将每个预览视为单个组件。对于示例代码,我使用了

  • <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    
  • cq expandgrid content
    设置为
    hidden=“true”
    ,以便默认情况下iframe不可见

  • <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    
  • 让预览缩略图负责设置iframe的url,这样可以在显示/隐藏iframe时轻松播放/停止视频。还要确保在src的末尾添加
    autoplay=1

    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    

  • <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    
HTML

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>

这是工作小提琴

我认为您可以使用
eq(index)
选择类名为
.cq expandgrid toggle的第一个节点
。而且,
id
选择器在一个页面中是唯一的,因此不需要为其添加[0]。对不起我的英语,我希望你能理解我的意思

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
jQuery(function($) {
    $('.cq-expandgrid-toggle').eq(0).on('click', function(ev) {
        $("#pvideo").src += "&autoplay=1";
        ev.preventDefault(); 
    });
});

您需要将jQuery选择器的范围限制为单击的div标记内的元素

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
这应该行得通

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
jQuery('.cq-expandgrid-toggle').click(function(ev) { 
    jQuery(this).parent().find("iframe")[0].src += "&autoplay=1";
    ev.preventDefault();
});
更新

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
当用户在播放第一个视频时单击第二个视频时,第一个视频也开始与第二个视频一起播放,因为第一个视频也具有
autoplay=1
。在将
autoplay=1
添加到第二个iframe之前,需要重置第一个iframe的url

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
var url = jQuery('#YourIFrameID').attr('src').replace('&autoplay=1', '');
jQuery('#YourIFrameID').setAttribute('src', '');
jQuery('#YourIFrameID').setAttribute('src', url);
您还将每个iframe的id设置为
pvideo
,这是错误的HTML,因为id应该是唯一的

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
如果你问我你实现这个视频库的方式是完全错误的。 有很多问题

<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>


<div class="cq-expandgrid-toggle">
  <span id="pvideo">
      Click me
  </span>
</div>

</body>
</html>
  • 您正在加载页面加载上的所有iFrame。您应该使用在缩略图单击时加载播放器

  • <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    
  • 在页面加载上加载所有iframe需要很多时间。大多数用户不会播放您的所有视频

  • <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    
  • 另外,当附加
    autoplay=1
    时,iframe会再次加载,因此加载页面是一种浪费

  • <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>
    

    YouTube API还为您提供了停止和启动视频的方法。因此,点击缩略图,您可以停止当前视频,加载新视频并播放。

    我建议您也发布问题中查询的HTML,而不是外部链接到它,同时在代码片段中发布HTML/Javascript。这就是
    $('.cq expandgrid toggle')
    的作用。它选择所有匹配的元素,因此所有元素都与该类匹配。如果您只想针对一个特定的元素(或更特定的一组元素),您需要一个更特定的选择器。我认为使用
    这个
    可以解决您的问题。实际上,我使用的是#pvideo作为iframe id-
    ,当单击“cq expandgrid toggle”时应该会打开它。保存youtube视频的容器是cq expandgrid内容,单击cq expandgrid切换时打开。所以这可能是另一个。@user2983808我更新了我的答案,以使用您给我的新信息。下次请在提问时提供示例HTML代码。Downvoter,请发表评论,以便在我尝试查找(“iframe”)和查找(“pvideo”)时更正我的错误。这两种因素都是相互影响的。pvideo是我在嵌入式iframe中使用的id。
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    
    <div class="cq-expandgrid-toggle">
      <span id="pvideo">
          Click me
      </span>
    </div>
    
    </body>
    </html>