Tengo el siguiente código que uso clone()
y live()
. El código se está cargando en un diálogo de la interfaz de usuario jQuery con un enlace. Cada vez que hago clic en el enlace, va al servidor y completa el cuadro de diálogo con el siguiente código. La primera vez que se carga la página funciona bien, pero si cierro el cuadro de diálogo y vuelvo a hacer clic en el enlace para obtener el diálogo, la cantidad de solicitudes Ajax que se envían aumenta.El número de solicitudes Ajax aumenta con live jQuery
La primera vez que envío desencadenar el cambio, envío solo una solicitud, cierro el cuadro de diálogo y lo cargo de nuevo y luego desencadenó el cambio, envía dos solicitudes Ajax al mismo tiempo, la tercera vez tres solicitudes al mismo tiempo y pronto.
¿Dónde crees que está mi problema?
<input id="TaskId" name="TaskId" type="hidden" value="18" />
<div id="MainDiv">
<div id="toClone">
<div style="display: inline;">
<select id="Tasksess">
<option value="">لطفاً کار را انتخاب کنيد</option>
<optgroup label="کار های جديد">
<option value="16"style="">q3fe</option>
<option value="18"style="">fjhv j</option>
<option value="19"style="">wref</option>
<option value="25"style="">ff</option>
</optgroup>
<optgroup label="کار های در دست اقدام">
<option value="13"style="">rr</option>
<option value="15"style="">yy</option>
</optgroup>
<optgroup label="کار های تمام شده">
<option value="14"style="">tt</option>
<option value="18"style="">fjhv j</option>
</optgroup>
</select>
</div>
<div style="display: inline;">
<select id="Statusess" name="Statusess"><option value="">لطفاً وابستگی را انتخاب کنيد</option>
<option value="1">پيشنياز</option>
<option value="2">همنياز</option>
</select>
</div>
<div style="display: none;" id="Ok">
ok
</div>
<div style="display: none;" id="noOk">
تکراری
</div>
<div id="loadingGif" style="display: none;">
<img src="/Content/Images/ajax-loader/253L.gif" alt=""/>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
var Maindiv = $("#MainDiv");
var toClone = $("#toClone");
//$("#Statusess").each(function() {
$("#Statusess").live('change', function() {
if ($(this).find(":selected").val() != "") {
if ($(this).parent().prev().find(":selected").val() != "") {
$(this).parent().parent().find("#loadingGif").attr("style", "display: inline;");
$.ajax({
url: '/ProjectAdmin/Project/AddTaskDependency?MainTaskId=' + $("#TaskId").val() + '&DependentTaskId=' + $(this).parent().prev().find(":selected").val() + '&Status=' + $(this).find(":selected").val(),
type: 'GET',
success: function (data, status) {
if (data != "0") {
$(this).parent().parent().find("#Ok").attr("style", "display: inline;");
$(this).parent().parent().find("#noOk").attr("style", "display: none;");
}
else if (data == "0") {
$(this).parent().parent().find("#Ok").attr("style", "display: none;");
$(this).parent().parent().find("#noOk").attr("style", "display: inline;");
}
var div = $('div:eq(0)', Maindiv).clone();
Maindiv.append(div);
}
});
$(this).parent().parent().find("#loadingGif").attr("style", "display: none;");
}
}
});
//});
});
</script>
nota al margen, no es una solución: no use 'live()' pero 'on()' en su lugar –
Probé su código en Firefox y Chrome (consulte http: // jsfiddle.net/PXhdj /) pero solo hace una solicitud de Ajax para cada evento 'change'. ¿Quizás tiene algún otro código que está haciendo llamadas Ajax/causando eventos 'change'? BTW Para establecer estilos en elementos, use '.css ('display', 'inline')' en lugar de '.attr ('style', ...)' –