0
我有一個GirdView
和Girdview
我有一個Checkbox
列。 Checkbox
AutoPostback
屬性設置爲TRUE
因爲我正在做Checkbox
checked
狀態的一些數據庫工作。現在我與Jquery
DialogBox
代替正常javascript confirm
盒,但當用戶check
的checkbox
對話框出現,然後用戶必須確認他們是否確信他們要選中該複選框,如果他們按YSE則複選框被選中,然後問題我希望服務器端事件發生。取而代之的是,只要用戶選中複選框和服務器端事件觸發,然後即使按下「否」,對話框也會出現,數據庫已用YES更新。jquery對話不等待用戶輸入和服務器端事件immidiatly發生
這是我的代碼。
HTML
<asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false"
CssClass="gvClickCollectOrders" DataKeyNames="OrderId" OnRowDataBound="gvOrders_RowDataBound"
AllowPaging="true" OnPageIndexChanging="gvOrders_PageIndexChanging">
<Columns>
<asp:BoundField DataField="OrderId" Visible="false" />
<asp:BoundField DataField="OrderNumber" HeaderText="Order No" DataFormatString="WWW {0}"
/>
<asp:TemplateField HeaderText="Order Date">
<ItemTemplate>
<asp:Label ID="orderDateText" Text="" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Order Ship Date">
<ItemTemplate>
<asp:HyperLink ID="orderShipDateAndTrackingData" CssClass="trackingInfo"
runat="server" Target="_blank" Text="" NavigateUrl=""></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Customer Name">
<ItemTemplate>
<%# Eval("BillToFirstName") %>
<%# Eval("BillToLastName") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Received In Store">
<ItemTemplate>
<asp:CheckBox ID="cbIsReceived" runat="server" AutoPostBack="true" Checked='<%# MWClickAndCollectHelper.CheckOrderReceivedStatus(AlwaysConvert.ToInt(Eval("OrderId"))) %>'
OnCheckedChanged="cbIsReceived_CheckedChanged" CssClass="isReceivedCheckBox"
/>
<asp:Label ID="receivedDateText" Text="" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Collected By Customer">
<ItemTemplate>
<asp:CheckBox ID="cbIsCollected" runat="server" AutoPostBack="true" Checked='<%# MWClickAndCollectHelper.CheckOrderCollectedStatus(AlwaysConvert.ToInt(Eval("OrderId"))) %>'
OnCheckedChanged="cbIsCollected_CheckedChanged" CssClass="isCollectedCheckBox"
/>
<asp:Label ID="collectedDateText" Text="" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<asp:Label ID="emptyGrid" runat="server" Text="There are no 'Click and Collect' orders placed for this store."
CssClass="emptyGridMessage"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
jQuery的
< script type = "text/javascript" >
var isReceivedCheckBox = $('.isReceivedCheckBox input[type=checkbox]');
var isCollectedCheckBox = $('.isCollectedCheckBox input[type=checkbox]');
var def = $.Deferred();
function confirmDialog(msg) {
var dialog = $("<div id=\"dialog\">" + msg + "</div>");
$(dialog).dialog({
autoOpen: true,
width: 300,
height: 200,
resizable: false,
modal: false,
buttons: {
'Yes': function() {
def.resolve();
$(this).dialog("close");
},
'No': function() {
def.reject();
$(this).dialog("close");
}
},
close: function() {
$(this).remove();
}
});
return def.promise();
}
$(function() {
$(isReceivedCheckBox).on("change", function() {
var checked = this.checked;
var checkbox = this;
if (checked) {
confirmDialog("are your sure you want to check this checkbox?").done(function() {
checkbox.checked = true;
})
.fail(function() {
checkbox.checked = false;
});
} else {
confirmDialog("are your sure you want to uncheck this checkbox?").done(function() {
checkbox.checked = false;
})
.fail(function() {
checkbox.checked = true;
});
}
});
}); < /script>
我手工做回發... +1的鏈接的基本思想......但不知何故,我不明白什麼是錯我的代碼..和爲什麼它不與AutoPostbask – 2013-02-20 11:56:35
工作,我認爲他們兩人同時開槍並行。基本上,當你在等待確認時,回發事件到達服務器完成其工作。主要原因:你用jquery和服務器端複選框的回覆操作同時處理由.net框架處理的確認而分開。 – genesistr 2013-02-20 12:41:32