私は、テキストボックスとボタンを含むusercontrolファイルを作成しています。javascriptの特定の動的ボタンでonclickイベントを呼び出す方法
コントロールは、1ページに複数のレコードをレンダリングするため、テキストボックスとボタンを動的に作成してレンダリングします。
私は、テキストボックスに値があるかどうかを検証するためのjavascript関数を呼び出そうとしています。私の問題は、どのボタンが動的に作成されているのでクリックされたのか判断できないことです。 (親ページのグリッドビューでこのコントロールを統合しているため、動的になります)
コミュニティにアドバイスしてください。私が仮定しているのは、私がclosure
を呼び出す前に取得しているボタンのIDにインデックスを設定できないということです。
私はこのウェブサイトで利用可能ないくつかのリンクを試しましたが、最終的に私は特定の答えを探すためにここに私の問題を掲載しています。
以下は私のコードsnipeetです。
HTML:
function validateSubmit() {
var btn = document.getElementsByClassName('frmBtn').length;
var btnId = document.getElementById('<%=commentSubmitButton.ClientID%>').id;
for (var j = 1; j <= btn; j++) {
(function(j){
btnId[j].onclick = function(){
alert('INSIDE CLICK');
var e = document.getElementsByClassName('frmTextBox')[j].value;
if (e == '') {
document.getElementsByClassName('lbl')[j].style.display = 'block';
}
}
})(j);
}
}
<div class="frmContent">
\t <p style="float: right; padding-top: 2em;">
\t \t <asp:Button ID="commentSubmitButton" runat="server" Text="Submit" CssClass="frmBtn" OnClientClick="validateSubmit(this);" />
\t
\t </p>
\t <p>
\t \t <label for="txtComment" class="frmLabels">
\t \t \t Type Comment Here
\t \t \t
\t \t \t <label id="lblStar" class="lbl" style="display:none;color:red;">*</label>
\t \t </label>
\t \t <asp:TextBox ID="txtComment" runat="server" Height="60" Width="75%" TextMode="MultiLine" CssClass="frmTextBox" ></asp:TextBox>
\t </p>
</div>
JAVASCRIPT:
は、おそらくこれを行うためのさまざまな方法があります。それが私だったら、クリック事象が上に泡立つという事実を利用したいと思います。ですから、onclick = "myfunction(event)"を使ってonclickイベントを個々の要素に共通の親に付けません。イベントオブジェクトは、実際にクリックされた要素を(event.targetを使用して)通知します。 –
私はあなたが私の問題に近づいていると思います。私の問題に適切なスニペットをお願いしますか?私はあなたの入力を感謝します。 – Binoy
あなたのコードから最終的なHTMLがどのように見えるか分かりませんが、たとえば、onclick = "myfunction(event)"をトップレベルのdivに付けることができます。 div内の何かがクリックされた場合、そのイベントはdivにバブルされます。ダイナミックエレメントのIDをエンコードすることで、どのボタンがクリックされたかを知ることができ、そのIDから、関連するテキストボックスの検索方法を知ることができます。例えば、ボタンはID = "button_1"、テキストボックスはID = "textbox_1"を持つことができます。ページにIDをユニークに保つようにしてください。申し訳ありませんが私はもっと明確にすることはできませんでした。 –