Sto cercando di creare la tabella che crea righe utilizzando ajax. il problema è che quando ho assegnato l'ascoltatore "click" sulla base del nome della classe è sempre chiamato tempo multiploIl listener "clic" viene eseguito più volte
il mio codice è
function fn_getAlertRules(parentRowId) {
$.ajax({
type: "GET",
url: anyURL,
contentType: "application/json",
dataType: "json"
}).done(function(data) {
// create row to add to parent table's row
var s_rulesHtmlString = '<tr><td colspan="3" class="rules-parent-tr"><table><tbody>';
$.each(data, function(i, name) {
s_rulesHtmlString += '<tr class="rule-tr">';
s_rulesHtmlString += '<td class="eventid-td">Rule ID:'+ name.RuleId+'<span>' + name.OccuredEventId + '</span></td>';
s_rulesHtmlString += '<td>' + name.Name + '</td><td>' + name.RuleDate + '</td>';
s_rulesHtmlString += '</tr>';
});
s_rulesHtmlString += '</tbody></table></td></tr>';
// add row below parent tr
$(parentRowId).parent().after(s_rulesHtmlString);
$(".rule-tr").on("click", "td", function(event) {
// this code blocks get executed multiple times
});
});
}
Qualcuno può dirmi, motivo per cui è sempre chiamato tempo multipla ?
Quante volte stai chiamando quella funzione? – JJJ
fn_getAlertRules vengono chiamati solo una volta! solo il codice all'interno di .on ("click") viene chiamato tante volte quante sono le righe presenti –
Il modello '$ (". regola-tr "). on (" clic "," td ", funzione (evento)' ha sostituito il vecchio evento 'live', che è stato utilizzato per associare gli elementi anche dopo che il dom è stato modificato, quindi su ogni chiamata ajax si stanno aggiungendo gli ascoltatori all'evento 'click' più e più volte – Candide