首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript -多参数函数,它是用于多图像库的字符串。

JavaScript -多参数函数,它是用于多图像库的字符串。
EN

Stack Overflow用户
提问于 2016-04-27 10:41:42
回答 3查看 96关注 0票数 0

我有这样的功能,可以让画廊通过他的ID:

代码语言:javascript
复制
    document.getElementById('galleryID').onclick = function (event) {
         event = event || window.event;
         var target = event.target || event.srcElement,
             link = target.src ? target.parentNode : target,
             options = {index: link, event: event},
             links = this.getElementsByTagName('a');
         bg.Gallery(links, options);
     };

但问题是,当我在一份文件中有多个画廊时:

id="gallery01"id="gallery02"id="gallery03" .一直到id="gallery11"

现在,我用不同的ID多次播放了11次图片库脚本代码:

document.getElementById('gallery01').onclick = function (event) { ... document.getElementById('gallery02').onclick = function (event) { ... document.getElementById('gallery03').onclick = function (event) { ...

一直到..。

document.getElementById('gallery11').onclick = function (event) { ...

我希望有一个JS函数,而不是11。我如何做到这一点?

我想使用正则表达式,但是我的组合不起作用。我认为这将是非常好的解决方案,如果它可以这样做-使用正则exp在适当的地方是'galleryID'

EN

回答 3

Stack Overflow用户

发布于 2016-04-27 10:45:42

尝试使用下面的函数调用添加事件

代码语言:javascript
复制
<div class="gallery" id="gallery1" onclick="getGalleryDetailFor(event)">
<div class="gallery" id="gallery2" onclick="getGalleryDetailFor(event)">

编辑过的

代码语言:javascript
复制
<script>
function getGalleryDetailFor(event)
{
  event = event || window.event;
  var target = event.target || event.srcElement,
  link = target.src ? target.parentNode : target,
  options = {index: link, event: event},
  links = this.getElementsByTagName('a');
  bg.Gallery(links, options);
}
</script>

新更新

代码语言:javascript
复制
<div class="gallery" id="gallery1" onclick="getGalleryDetailFor('gallery1')">Gallery 1</div>
<div class="gallery" id="gallery2" onclick="getGalleryDetailFor('gallery2')">Gallery 2</div>

JavaScript

代码语言:javascript
复制
function getGalleryDetailFor(ids)
{
   document.getElementById(ids).addEventListener('click',function (event)
   {
      event = event || window.event;
      var target = event.target || event.srcElement,
      link = target.src ? target.parentNode : target,
      options = {index: link, event: event},
      links = this.getElementsByTagName('a');
      bg.Gallery(links, options);  
  }); 
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-27 10:54:54

我有两个想法:首先,您可以添加类并使用类似的

代码语言:javascript
复制
    getElementsByClassName('gallery').forEach(function(galery){
        gallery.function (event) { ...
    })

或使用您想要使用的所有id创建数组,并使用forEach,如

代码语言:javascript
复制
    ['id1','id2','id3'....].forEach(idName=>{
            document.getElementById(idName).onclick = function (event)         { ...
    })

编辑:

也许你应该检查一下:Find all elements based on ids using regex on jQuery selector

票数 0
EN

Stack Overflow用户

发布于 2016-04-27 11:08:02

您可以定义一般类型,例如“ui库”,并将类添加到要将此事件绑定到的每个元素中:

代码语言:javascript
复制
<div id="gallery1" class="ui-gallery"></div>

<script>
// with multiple handlers for different gallery elements
var handlersPool = {
    "default" => function(event) { ... },
    "gallery1" => function(event) { ... },
    "gallery2" => function(event) { ... },
    ...
}
var uiGalleries = document.getElementsByClassName("ui-gallery");
for (i = 0; i < uiGalleries.length; i++) {
    var el = uiGalleries[i];
    el.onclick = handlersPool[el.id] || handlersPool.default;
}
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36887492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档