【问题标题】:JavaScript - multiple argument function, which is a string for multiple image galleryJavaScript - 多参数函数,它是多个图像库的字符串
【发布时间】:2016-08-21 14:43:37
【问题描述】:

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

    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。我该怎么做?

我想使用正则表达式,但我的组合不起作用。我认为如果可以这样完成,那将是一个非常好的解决方案 - 在 'galleryID' 的位置使用正则表达式。

【问题讨论】:

    标签: javascript html gallery image-gallery photo-gallery


    【解决方案1】:

    您可以定义一个通用类型,例如“ui-gallery”,并将类添加到您想将此事件绑定到的每个元素:

    <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>
    

    【讨论】:

    • 但是这个解决方案增加了我试图避免的 JS 函数代码。
    • 如果您对所有画廊使用相同的功能,则从 handlersPool 中删除除“默认”之外的所有功能
    【解决方案2】:

    我有两个想法: 首先你可以添加类并使用like

        getElementsByClassName('gallery').forEach(function(galery){
            gallery.function (event) { ...
        })
    

    或者用你想要使用的所有 id 制作数组并使用 forEach 像

        ['id1','id2','id3'....].forEach(idName=>{
                document.getElementById(idName).onclick = function (event)         { ...
        })
    

    编辑:

    也许您应该检查以下内容: Find all elements based on ids using regex on jQuery selector

    【讨论】:

    • 它不会同时“解雇”11 个画廊吗?当用户选择某人时,galleryID 应该是从点击中获取的。
    • 不,它不会同时触发所有画廊。更多细节如何在 js 中工作你可以在这里找到:developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/… 在事件正文中小心使用“this”属性。
    【解决方案3】:

    尝试使用这样的函数调用添加事件

    <div class="gallery" id="gallery1" onclick="getGalleryDetailFor(event)">
    <div class="gallery" id="gallery2" onclick="getGalleryDetailFor(event)">
    

    已编辑

    <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>
    

    新更新

    <div class="gallery" id="gallery1" onclick="getGalleryDetailFor('gallery1')">Gallery 1</div>
    <div class="gallery" id="gallery2" onclick="getGalleryDetailFor('gallery2')">Gallery 2</div>
    

    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);  
      }); 
    }
    

    【讨论】:

    • 我做了某事。像这样,它没有工作。 function getGalleryID(ids) { document.getElementById(ids).onclick = function (event) {... }; }
    • 不,在这之后你只需要在你在这里的函数中编写代码 - > {... }; 并且没有花括号
    • 还是不行。我将在上面的问题中添加整个功能。
    • 我担心解决方案不起作用。我按照您的建议进行了更改,但是当我单击图像时,我只能看到带有干净图像的新文档视图,例如 JS 没有启动。
    • 你是否改变了 onclick 函数,比如点击图像时getGalleryDetailFor(event) ?
    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多