Ho il codice sotto il quale utilizzo clone()
e live()
. Il codice viene caricato in una finestra di dialogo dell'interfaccia utente jQuery con un collegamento. Ogni volta che clicco il collegamento, vado al server e compilo il dialogo con il codice sottostante. La prima volta che viene caricata la pagina funziona bene, ma se chiudo la finestra di dialogo e clicco di nuovo sul link per ottenere la finestra di dialogo, il numero di richieste Ajax che sta per essere inviato aumenta.Il numero di richieste Ajax aumenta con live jQuery
La prima volta che mando innescare il cambiamento mando solo una richiesta, chiudo la finestra di dialogo e inserirla nuovamente e quindi innescare il cambiamento, inviare due richiesta Ajax allo stesso tempo, la terza volta di tre richiesta allo stesso tempo e presto.
Dove pensi che sia il mio 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>
sidenote, non una correzione: non utilizzare 'dal vivo()' ', ma il()' invece –
ho provato il codice in Firefox e Chrome (vedi http: // jsfiddle.net/PXhdj /) ma effettua solo una richiesta Ajax per ogni evento 'change'. Forse hai qualche altro codice che sta facendo chiamate Ajax/causando eventi 'change'? BTW Per impostare gli stili sugli elementi, usa '.css ('display', 'inline')' invece di '.attr ('style', ...)' –