我在javascript中有一个函数
function whatClassNorH(thatDiv,prop){
if(prop==='numer'){
for(var i=0; i<tab.length;i++){
if($(thatDiv).hasClass('numer_'+i))return i;
}
}
if(prop==='hide_id'){
for(var i=0; i<=maxID;i++){
if($(thatDiv).hasClass('hide_id_'+i))return i;
}
}
}
function drawZadania(){
$('.content').html('');
for(var i=0; i<tab.length;i++){
if(tab[i][1]===0 || tab[i][1]==='0'){
$('.content').append('<div class="zadanie_line numer_' + i + ' hide_id_' + tab[i][0] + '"></div>');
$('.content .zadanie_line.numer_'+i).append('<div class="single_property priorytet numer_' + i + ' hide_id_' + tab[i][0] + '">Priorytet</div>');
$('.content .zadanie_line.numer_'+i).append('<div class="single_property dziedzina numer_' + i + ' hide_id_' + tab[i][0] + '">Dziedzina</div>');
$('.content .zadanie_line.numer_'+i).append('<div class="single_property tytul numer_' + i + ' hide_id_' + tab[i][0] + '">Tytul</div>');
$('.content .zadanie_line.numer_'+i).append('<div class="single_property data numer_' + i + ' hide_id_' + tab[i][0] + '">Data</div>');
$('.content .zadanie_line.numer_'+i).append('<div class="single_property opis numer_' + i + ' hide_id_' + tab[i][0] + '">Opis</div>');
$('.single_property.priorytet.numer_' + i + '.hide_id_' + tab[i][0]).html(tab[i][2]);
$('.single_property.dziedzina.numer_' + i + '.hide_id_' + tab[i][0]).html(tab[i][3]);
$('.single_property.tytul.numer_' + i + '.hide_id_' + tab[i][0]).html(tab[i][4]);
$('.single_property.data.numer_' + i + '.hide_id_' + tab[i][0]).html($.date(tab[i][5]));
$('.single_property.opis.numer_' + i + '.hide_id_' + tab[i][0]).html(tab[i][6]);
}
}
}
$('#btn_sortuj').click(function(){
$('.second_menu').append('<div id="btn_sort_priorytet">Sortuj Według Priorytetu</div>');
$('.second_menu').append('<div id="btn_sort_dziedzina">Sortuj Według Dziedziny</div>');
$('.second_menu').append('<div id="btn_sort_data">Sortuj Według Daty</div>');
});
$('#btn_sort_priorytet').click(function(){
sortPriorytet();
drawZadania();
});
$('#btn_zobacz').click(function(){
sortPriorytet();
drawZadania();
});
$('.zadanie_line').click(function(){
console.log('numer: '+ whatClassNorH(this,'numer'));
console.log('hideId: '+ whatClassNorH(this,'hide_id'));
});
drawZadania();
checkPage();
工作原理: 当页面开始,然后点击#btn_zobacz时,click事件会正确触发,因为#btn_zobacz在页面的html中。稍后,当我单击#btn_sortuj时 - 它会附加另外三个div作为按钮。当我点击它们时,没有任何反应。
另外,当第一次加载页面时,我使用drawZadania()函数,当我单击.zadanie_line元素时 - 它正确地控制了.number和.hiddenId的.log数量。但是当我用#btn_zobacz再次绘制它们时,点击('。zadania_line')不会触发。
我的问题是,点击功能根本不响应所有点击div。我该怎么办?
答案 0 :(得分:2)
将委托与.on():
一起使用$('.content').on('click','.zadanie_line',function(){
//...
});
答案 1 :(得分:1)
您必须为此使用事件委派。原因是因为btn_sort_priorytet
,zadanie_line
是动态创建的,但事件处理程序的绑定要比元素的创建早得多。因此,您的代码必须如下所示:
$('.second_menu').on("click", '#btn_sort_priorytet', function () {
sortPriorytet();
drawZadania();
});
$(document).on("click", '#btn_zobacz", function () { //or closest static parent (an element which exists all the time
sortPriorytet();
drawZadania();
});
$(".content").on("click", '.zadanie_line', function () {
console.log('numer: ' + whatClassNorH(this, 'numer'));
console.log('hideId: ' + whatClassNorH(this, 'hide_id'));
});
如果你使用的是旧版本的jQuery,比如v1.7,你也可以使用live()
。它不在最新版本的jQuery中,所以要小心它的用途。此外,与on
相比,live
的效果很差。
$('#btn_sort_priorytet').live("click", function () {
sortPriorytet();
drawZadania();
});
$('#btn_zobacz').live("click", function () {
sortPriorytet();
drawZadania();
});
$('.zadanie_line').live("click", function () {
console.log('numer: ' + whatClassNorH(this, 'numer'));
console.log('hideId: ' + whatClassNorH(this, 'hide_id'));
});
on
的文档:http://api.jquery.com/on/
live
的文档:http://api.jquery.com/live/
答案 2 :(得分:0)
只需使用.on()
:http://api.jquery.com/on/
$('.content').on('click', '.zadanie_line', function(){
console.log('numer: '+ whatClassNorH(this,'numer'));
console.log('hideId: '+ whatClassNorH(this,'hide_id'));
});
然后,处理程序将附加到所有现有的.zadanie_line
元素以及将来创建的所有元素。