我有下面的代碼,我使用clone()
和live()
。 代碼正在通過鏈接加載到jQuery UI對話框中。 每當我點擊鏈接,它就會進入服務器,並用下面的代碼填充對話框。 第一次加載頁面時可以正常工作,但如果關閉對話框並再次單擊鏈接以獲取對話框,則正在發送的Ajax請求數量會增加。使用實時jQuery增加Ajax請求的數量
我第一次發送觸發器的變化我只發送一個請求,我關閉對話框並重新加載它然後觸發更改,它同時發送兩個Ajax請求,第三次同時發送三個請求,等等。
你認爲我的問題在哪裏?
<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>
注意,不是解決方法:不要使用'live()',而是使用on()'而不是使用 –
我在Firefox和Chrome中嘗試了您的代碼(請參閱http:// jsfiddle。net/PXhdj /),但它僅爲每個「change」事件發出一個Ajax請求。也許你有其他一些代碼正在進行Ajax調用/導致'change'事件?順便說一句,要在元素上設置樣式,請使用'.css('display','inline')'而不是'.attr('style',...)' –