検証コントロールを使用するときにボタンコントロールに追加されるASP.NETのJavaScriptonclickイベントハンドラーを置き換えようとしています。これは、このシナリオでASP.NETからHTMLに出力されるものです。
<input type="image" name="ibSubmit1" id="ibSubmit1" src="button-green-submit.gif" onclick="showProgress1();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ibSubmit1", "", true, "Group1", "", false, false))" style="border-width:0px;" />
私はかなり熱心に見てきましたが、残念ながら、ページに挿入される前に関数サーバー側を変更する方法はないようです。
コントロールを開発していて、非侵襲的で自己完結型であることが望まれ、WebForm_PostBackOptionsオブジェクトのvalidationGroupパラメーターを取得することに関心があるため、JavaScriptを使用してWebForm_DoPostBackWithOptions関数名を次のように置き換えるのが最も簡単な解決策のようです。カスタムラッパー関数を使用して、残りのすべてのパラメーター情報をそのまま残します。次に、関心のある情報を抽出し、カスタム関数を呼び出してから、呼び出しをWebForm_DoPostBackWithOptionsに転送します。
注:私はjQueryを使用してカスタム関数を作成しているので、jQueryでこれを行う簡単な方法がある場合は、それを検討するオプションです。
onclickイベントハンドラーを置き換えようとしたコードは次のとおりです(機能していません)。
$('[onclick*=WebForm_DoPostBackWithOptions]').each(function() {
var txt = this.onclick;
txt = txt + '';
txt = txt.replace('WebForm_DoPostBackWithOptions','ml_DoPostBackWithOptions');
this.onclick = eval(txt);
});
alert()を使用して、テキストが正しく変更されていることを確認しましたが、eval()関数を使用するかどうかに関係なく、onclickハンドラーはJavaScriptとして認識しないようです。
正規表現を使用してvalidationGroup値を取得することを考えましたが、これを機能させることができれば、はるかにエレガントで柔軟になるようです...
注:コントロールがページに問い合わせる方法がある場合は、(ボタンの種類に関係なく)ポストバックするすべてのボタンを見つけて、サーバー側のプロパティを取得できるようにします。これも私が検討する何か。