我有一段jQuery代码,当用户更改select的值时,它会将选定的值复制到其他类似的选择(相同的CSS类),如果它们没有更改价值已经。是否有更有效的方法来执行以下操作?它运行有点迟缓,至少在IE7中。
$('.selectclass').change(function() {
if ($(this).val() != '') {
var baseElem = $(this);
$('.selectclass:gt(' + $('.selectclass').index(this) + ')').each(function (i) {
if ($(this).val() == '') {
$(this).val(baseElem.val());
}
});
}
});
答案 0 :(得分:2)
这应该更好地优化:
$('input.selectclass').change(function(){
if (this.value !== '') {
var newVal = this.value,
boxes = $('input.selectclass');
boxes.slice(boxes.index(this)).val(function(i, oldVal) {
return oldVal === '' ? newVal : oldVal;
});
}
});
注意这是未经测试的。如果您可以提供HTML样本(例如jsfiddle),则可以更轻松地进行测试...
这里的效率:
input.selectclass
应该比.selectclass
更快,特别是在Internet Explorer this.value
而不是创建新的jQuery实例val
的内置回调签名,而不是使用each
手动循环。答案 1 :(得分:0)
因为他们都是同一个班级,你需要一个foreach吗?
$('.selectclass').change(function() {
$('.selectclass').val($(this).val())
}
答案 2 :(得分:0)
$('.selectclass').change(function() {
if ($(this).val() != '') {
$('.selectclass:gt(' + $('.selectclass').index(this) + ')').not(':empty').val($(this).val())
}
});
答案 3 :(得分:0)
您可以使用nextAll()来匹配树下的下一个同级<select>
元素:
$(".selectclass").change(function() {
var origin = $(this);
var value = origin.val();
if (value !== "") {
origin.nextAll(".selectclass").each(function() {
var $this = $(this);
if ($this.val() === "") {
$this.val(value);
}
});
}
});