2016-12-17 5 views
1

Может кто-нибудь мне помочь? Идея заключается в том, чтобы создавать динамические кнопки с петлей, а затем использовать функцию щелчка Jquery, чтобы использовать один из нихjquery dynamic click function

//I'm creating dynamic buttons like this: 

for(i=0; i<1000; i++){ 
    $contentBox.append('<button id="add'+ i +'" type="button" class="btn btn-success">Accept</button>'); 

    //but how would I create the jquery click function? 

    $('#add'+i).click(function(e) {....}); 

    //this does not create 1000 click functions. It only changes the id to the last one so what ever button you click on you will always get the las id 
} 
+0

Вы хотите использовать '$ (документ) .На ('нажмите', '# надстройку' + я», функция (е) {...}) 'для динамических элементов. Вы можете обратиться к документам SO о [делегированных событиях] (http://stackoverflow.com/documentation/jquery/1321/events/7666/delegated-events#t=201612170400446260567). У меня был пример, связанный с добавлением обработчиков событий к динамическим элементам, хотя он никогда не принимался/удалялся. В любом случае просто измените '$ ('ul')' на '$ (document)' в примере документации, чтобы он работал в любом случае. –

+0

использовать делегаты. '$ (document) .on (click: function() {}, '#add' + i)' – Nadeem

ответ

0

Если поставить i в .... вашего обработчика щелчка, он не исправит свою ценность, что это было, когда был создан обработчик щелчка; скорее, он всегда будет ссылаться на переменную i, которая принимает значение 1000, когда вы закончите цикл. Возможно, вы можете сохранить i в атрибуте кнопки, как показано ниже (или прочитать ее из идентификатора элемента).

$contentBox = $('#content'); 
 
$result = $('#result'); 
 

 
for(i=0; i<10; i++){ 
 
    $contentBox.append('<button id="add'+ i +'" data-eyeVal="' + i + '" type="button" class="btn btn-success">Accept</button>'); 
 

 
    //but how would I create the jquery click function? 
 

 
    $('#add'+i).click(function(e) {$result.append('<br/>clicked ' + $(this).attr('data-eyeVal'))}); 
 

 
    //this does not create 1000 click functions. It only changes the id to the last one so what ever button you click on you will always get the las id 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content"></div> 
 
<div id="result"></div>

+0

вы человек. Только то, что я хотел "$ (this) .attr ('data-eyeVal')" –

0

Вы должны использовать живую функцию для динамических событий щелчка кнопки. попробуйте этот

$('#add'+i).live("click", function(){ 
    // codings 
}); 
+0

['live()'] (http://api.jquery.com/live/) устарел и удален с «1.9». –

1

@ комментарий Спенсера на точке - вы можете использовать делегированные событие. Или, вы можете просто использовать класс кнопки:

for(i=0; i<1000; i++){ 
    $contentBox.append('<button id="add'+ i +'" type="button" class="btn btn-success">Accept</button>'); 

//Rest of your code 
} 

//Then attach the event to the class: 
$('button.btn-success').click(function(){ 
//I suspect you'll want the ID so here goes 
var buttonID = $(this).attr('id'); 
//The rest of the fun stuff 
});