2017-06-28 13 views
4

次のシナリオを検討する前にTextBoxのOnTextChangedは、(ASP.NETは "setTimeoutメソッドを" 注入)発射を確認します。レンダリング時のOnClick

<asp:TextBox ID="txt" runat="server" AutoPostBack="true" OnTextChanged="txt_TextChanged"></asp:TextBox> 
<asp:Button ID="btn" runat="server" OnClick="btn_Click" CausesValidation="false" UseSubmitBehavior="false" /> 

は、これら2つのコントロールは次のようになります。setTimeoutメソッドへ

<input name="txt" type="text" onchange="javascript:setTimeout('__doPostBack(\'txt\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="txt"> 
<input type="button" name="btn" onclick="javascript:__doPostBack('btn','')" id="btn"> 

感謝Changeイベントの前にClickイベントが発生しています。

After some research、私は、以前のバージョンのIEでは古いグリッチのためにASP.NETがこれを行うことを発見しました。

しかし、私のボタンをクリックするとテキストボックスが隠れ、「無効なポストバックまたはコールバック」エラーが発生するため、この問題が発生しています。

私は実行順序を修正することができますので、クリックする前にTextChangedが常に起動しますか?

PS:私はイベントの1つを変更するためにJavascriptを/ jQueryのを使用して喜んで、しかし(私はおそらくそれのためにevalを使用するように強制されるので)私は、このようなソリューションのパフォーマンスに関する疑問に思い

+0

downvoterは、この質問を改善する方法について明確にしてくださいことはできますか? – Lucas

+0

この記事の最初の質問は、ASP.NETが非常に高いレベルでどのように動作するかを本質的に尋ねるほど、広すぎると思われます。また、より関連性の高い情報を提供してください。問題は不足しているようだ。 – CrazyPaste

+0

固定、ありがとう.. – Lucas

答えて

0

ハックを少し使って解決しましたが、誰かが分かっていればもっと良い解決策にはまだ開いています。今のところ、私は、ページのロード時にこの機能を
を呼んでいる:

function removeSetTimeout() { 
    var inputs = "select, input[type=text], input[type=number], input[type=date], input[type=time]"; 
    $(inputs).each(function (index, elem) { 
     var change = $(elem).attr('onchange'); 
     if (change) { 
      var patch = /setTimeout\('__doPostBack\(\\'.*?\\',\\'\\'\)', 0\)/.exec(change); 
      if (patch) { 
       change = change.replace(patch[0], patch[0].substring(12, patch[0].length - 5).replace(/\\/g, '')); 
       $(elem).attr('onchange', change); 
      } 
     } 
    }); 
}