0

我想首先感谢任何可以帮助我压缩这段 Javascript/jQuery 代码的人。

        jQuery(function() {

            jQuery('#pitem-1').click(function(e) {
                jQuery("#image-1").lightbox_me({centered: true, onLoad: function() {
                    jQuery("#image-1").find("input:first").focus();
                }});

                e.preventDefault();
            });        

            jQuery('#pitem-2').click(function(e) {
                jQuery("#image-2").lightbox_me({centered: true, onLoad: function() {
                    jQuery("#image-2").find("input:first").focus();
                }});

                e.preventDefault();
            });

            jQuery('#pitem-3').click(function(e) {
                jQuery("#image-3").lightbox_me({centered: true, onLoad: function() {
                    jQuery("#image-3").find("input:first").focus();
                }});

                e.preventDefault();
            });

            jQuery('table tr:nth-child(even)').addClass('stripe');
        });

基本上每个#pitem-ID 在弹出窗口中打开相同的#image-ID。

再次感谢任何可以提供帮助的人。

杰克

4

4 回答 4

4

你的函数看起来都差不多,这是一个线索,你应该把这个功能移到可以调用的东西中:

function createHandler(id) {
    return function (e) {
        $(id).lightbox_me({centered: true, onLoad: function() {
            $(id).find("input:first").focus();
        }});

        e.preventDefault();
    }
};

然后你可以使用:

 $('#pitem-2').bind('click', createHandler("#image-2"));
于 2012-04-28T00:58:50.200 回答
3

你可以:

  1. 使用公共事件处理程序将多个对象组合到选择器中
  2. 用于this引用触发事件的对象
  3. 从生成事件的对象的 id 派生图像 ID。

这使您可以使用一段代码来处理所有三个对象的操作:

jQuery(function() {
    jQuery("#pitem-1, #pitem-2, #pitem-3").click(function() {
        var image$ = $("#" + this.id.replace("pitem", "image"));
        image$.lighbox_me({centered: true, onLoad: function() {
                    image$.find("input:first").focus();
        }});
        e.preventDefault();
    });
    jQuery('table tr:nth-child(even)').addClass('stripe');
});
于 2012-04-28T01:22:02.453 回答
2
$('[id^="pitem-"]').click(function(e) {
    var numb = this.id.split('-')[1];
    $("#image-"+numb).lightbox_me({centered: true, onLoad: function() {
         $(this).find("input:first").focus();
    }
    });
    e.preventDefault();
});        

$('table tr:nth-child(even)').addClass('stripe');
于 2012-04-28T01:06:15.583 回答
0

没有上下文就很难说,但是否有必要为每个 ID 设置一个唯一的 ID pitem?为什么不使用 CSS 类而不是像这样的 ID:

<div class="pitem">
<div id="image1"><img ... /></img>
</div>
...
<div class="pitem">
<div id="image3"><img ... /></img>
</div>

然后使用 jQuery 中的类选择器一次性添加所有的点击功能:

$(".pitem").click(function(e) {
  var currentItem = e.target;
  ...
  e.preventDefault();
});
于 2012-04-28T01:01:25.820 回答