如何动态构建jQuery选择器的元素ID?

时间:2012-11-05 00:50:08

标签: javascript jquery

我想通过使用循环来减少此代码。我怎样才能做到这一点?

$("#whiteJenisPembayaran1").live('focus', function() {
    $("#whiteJenisPembayaran1").typeahead(typeaheadConfig);
});
$("#whiteJenisPembayaran2").live('focus', function() {   
    $("#whiteJenisPembayaran2").typeahead(typeaheadConfig);
});
$("#whiteJenisPembayaran3").live('focus', function() {
    $("#whiteJenisPembayaran3").typeahead(typeaheadConfig);
});

5 个答案:

答案 0 :(得分:2)

您可以更改HTML吗?如果是,最好的方法是为这些元素设置 class 属性 这样你就可以做到这一点:

HTML:

<div class="whiteJenisPembayaran" id="whiteJenisPembayaran1"></div>
<div class="whiteJenisPembayaran" id="whiteJenisPembayaran2"></div>
<div class="whiteJenisPembayaran" id="whiteJenisPembayaran3"></div>
<div class="whiteJenisPembayaran" id="whiteJenisPembayaran4"></div>


使用Javascript:

$(".whiteJenisPembayaran").live('focus', function() {
    $(this).typeahead(typeaheadConfig);
});

答案 1 :(得分:1)

$("#whiteJenisPembayaran1, #whiteJenisPembayaran2, #whiteJenisPembayaran3").live('focus', function() {
    $(this).typeahead(typeaheadConfig);
});
现在

或更“正确”的方式:

$(document).on('focus', '#whiteJenisPembayaran1, #whiteJenisPembayaran2, #whiteJenisPembayaran3', function() {
    $(this).typeahead(typeaheadConfig);
});

答案 2 :(得分:1)

function bindListener(index) {
    var key = '#whiteJenisPembayaran' + index;
    $(key).live('focus', function() {
        $(key).typeahead(typeaheadConfig);
    });
}

var n = 5; // your max
for (var i = 1; i <= n; ++i) {
    bindListener(index);
}

以这种方式完成以防止在循环内绑定事件的闭包问题。

答案 3 :(得分:1)

您可以使用属性选择器[id ^ = string],它将选择ID以字符串开头的所有内容。

$("[id^=whiteJenisPembayaran]").live('focus', function() {
    $(this).typeahead(typeaheadConfig);
});

答案 4 :(得分:0)

你可以有一个像这样的所有id的数组:

ids = [ '#whiteJenisPembayaran1', '#whiteJenisPembayaran2', '#whiteJenisPembayaran3' ];

for (i = 0; i < ids.length; i++) {
    $(ids[i]).live('focus', function() {
        $(ids[i]).typeahead(typeaheadConfig);
    });
}