2017年1月21日 星期六

在GridView中如何Confirm CheckBox On Client Click

問題說明:
在系統實作的過程有可能會遇到需要在GridView中加入CheckBox元件,當使用者觸發OnCheckedChanged時,希望可以先啟動讓使用者確認異動的視窗。

<asp:templatefield footertext="序號" headertext="序號";>
<itemtemplate;>
<asp:checkbox AutoPostBack="True" id="selectedCB" oncheckedchanged="selectedCB_OnCheckedChanged" runat="server";></asp:checkbox;>
<asp:label id="indexNo" runat="server";></asp:label;>
</itemtemplate;>
<itemstyle horizontalalign="Justify" width="6%";>
</itemstyle;>
</asp:templatefield;>

上面布署的CheckBox元件,當使用者觸發CheckedChanged 後,會直接回送至伺服器,處理selectedCB_OnCheckedChanged even,要如何在Page PostBack前,觸發Confirm視窗呢?又如何讓完成的方法可以反覆使用呢?

我的作法:
1、將元件的布署修改如下:(取消AutoPostBack)

<asp:templatefield footertext="序號" headertext="序號";>
<itemtemplate;>
<asp:checkbox  id="selectedCB" oncheckedchanged="selectedCB_OnCheckedChanged" runat="server";></asp:checkbox;>
<asp:label id="indexNo" runat="server";></asp:label;>
</itemtemplate;>
<itemstyle horizontalalign="Justify" width="6%";>
</itemstyle;>
</asp:templatefield;>

2、掛上Client 端jQuery Fuction

function CancelOrChanged4CB(idFixName) {
$("input[type='checkbox']").on('change', function (e) {
            if ($(this).attr('id').indexOf(idFixName) === -1)
                return;
            if ($(this).prop('checked') === false) {
                if (confirm('確定取消報名嗎?') === false) {
                    $(this).prop('checked', true);
                    return;
                }
            }
            else {
                if (confirm('確定報名嗎?') === false) {
                    $(this).prop('checked', false);
                    return;
                }
            }
            __doPostBack($(this).attr('id'), '');
        });
}

3、在需要啟動CheckBox Confirm的頁面,加入下面jQuery程式碼:

$(window).load(function () {
        CancelOrChanged4CB('selectedCB');
    });

結語:
上面的 CancelOrChanged4CB function是可以重複啟動的。所以可以加入自建的jQuery lib中等候呼叫。

沒有留言: