首先,我要感谢能帮助我压缩这段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。
再次感谢任何可以提供帮助的人。
杰克
答案 0 :(得分: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"));
答案 1 :(得分:3)
你可以:
this
来引用触发事件的对象这使您可以使用一段代码来处理所有三个对象的操作:
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');
});
答案 2 :(得分: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');
答案 3 :(得分:0)
没有上下文很难说,但是每个pitem
是否有必要拥有唯一的ID?为什么不使用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();
});