2

チェックボックスといくつかのテキストボックスが表示されたASP.NETページがあります。

ユーザーがチェックボックスをオフにしたら、一連のチェックを実行して、結果をユーザーに通知する必要があります。チェックボックスautopostbackプロパティを使用して、ポストバックでこれらのチェックを行います。

<asp:CheckBox ID="chkDecision" runat="server" AutoPostBack="true" />

私が実装するもう1つのビジネスルールは、チェックボックスがオフになっていて、ユーザーがテキストボックスの1つに入力を開始すると、チェックボックスを自動的にオンにする必要があるというものです。私はJavascriptを介してこれを行っています:

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);">

function SelectDecision(e) {
        if (!checkSpecialKeys(e)) {
            var chkDec = $get('<%=chkDecision.ClientID %>');
            if (!chkDec.checked) {
                chkDec.checked = true;
            }                
        }
    }

上記のすべてが正常に機能します。

私が抱えているこの問題は、ユーザーがボックスに入力し始めると、チェックボックスがオンになることです。その後、手動でボックスのチェックを外すと、ポストバックは起動しません。

おそらくこれは、チェックボックスがページがロードされたときと同じ状態にあるため、一部の内部ロジックがポストバックが不要であると見なしているためです。

上記のシナリオで説明したサーバー側のチェックを実行するにはどうすればよいですか?

ファイナライズ 以下のヘルプのおかげで、提供された回答のテスト中に、これをさらに進めることができました。AutoPostBackテキストボックスに属性を設定できることがわかりました。

<asp:TextBox ID="txtLeft" runat="server" CssClass="textboxstandard" MaxLength="50" onkeyDown="SelectDecision(event);" AutoPostBack="true"></asp:TextBox>

私のシナリオでは、以下と同じことを達成しながら、編集の完了時にポストバックが発生するため、より使いやすいことがわかりました。ご協力ありがとうございます!

4

2 に答える 2

2

サーバーはクライアント側の変更を理解しません。checkedchangeイベントのJavaScriptを記述できます。

次のように実行します。この関数はチェックボックスをオンまたはオフにして、サーバーサイドの自動ポストバックを起動します

<script type="text/javascript"> 
        function SelectDecision() { 


            var chkDec = $get('<%=chkDecision.ClientID %>');                  

            //For checking or unchecking the checkbox. 
            if (chkDec .checked) { 
                chkDec .checked = false; 
            } 
            else { 
                chkDec .checked = true; 
            } 


            //For firing the click event. 
            if (document.createEventObject) { 
                // dispatch for IE 
                var evt = document.createEventObject(); 
                return element.fireEvent('on' + 'click', evt) 
            } 
            else { 
                // dispatch for firefox + others 
                var evt = document.createEvent("HTMLEvents"); 
                evt.initEvent('click', true, true); // event type,bubbling,cancelable 
                return !element.dispatchEvent(evt); 
            } 
        } 
    </script>

詳細: http: //forums.asp.net/t/1445241.aspx/1/10

于 2012-09-28T05:48:15.977 に答える
1

次を使用できます。

function SelectDecision(e) {
    if (!checkSpecialKeys(e)) {
        var chkDec = $get('<%=chkDecision.ClientID %>');
        if (!chkDec.checked) {
            chkDec.checked = true;
            __doPostBack('<%=chkDecision.ClientID %>', '');
        }                
    }
}
于 2012-09-28T08:27:14.627 に答える