Ich habe den Code, unter dem ich clone()
und live()
verwenden. Der Code wird in einem jQuery UI-Dialogfeld mit einer Verknüpfung geladen. Immer wenn ich auf den Link klicke, gehe ich zum Server und fülle den Dialog mit dem unten stehenden Code. Die erste Zeitseite wird geladen, es funktioniert gut, aber wenn ich den Dialog schließe und den Link erneut klicke, um den Dialog zu erhalten, erhöht sich die Anzahl der Ajax-Anfragen, die gesendet werden.Anzahl der Ajax-Anfragen steigt mit Live-jQuery
Das erste Mal, wenn ich die Änderung trigger ich nur eine Anfrage senden, schließe ich den Dialog und lade es erneut und dann die Änderung auslösen, es senden zwei Ajax Anfrage zur gleichen Zeit, das dritte Mal drei Anfrage gleichzeitig und bald.
Wo meinst du mein Problem?
<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>
sidente, keine Lösung: Verwenden Sie 'live()' nicht, sondern 'on()' stattdessen –
Ich habe Ihren Code in Firefox und Chrome versucht (siehe http: // jsfiddle.net/PXhdj /), aber es macht nur eine Ajax-Anfrage für jedes 'change'-Ereignis. Vielleicht haben Sie einen anderen Code, der Ajax-Aufrufe/-Ereignisse verursacht? Um Stile für Elemente festzulegen, verwenden Sie '.css ('display', 'inline')' anstelle von '.attr ('style', ...)' –