[ad_1]
ユーザーが数値を入力するための asp.TextBoxes を備えた aspx Web フォームがあります。
その後チェックボックスをクリックすると、これらの数値はゼロに変わります。
問題は、それらが変わらないことです。
これらは TextBox の例です –
<asp:TextBox CssClass="pcnt18right" type="number" min="0" style="width:10%; text-align:right" placeholder="00" ID="TimeMins" runat="server"></asp:TextBox>
<asp:TextBox CssClass="pcnt18right" type="number" min="0" Style="text-align: left;" ID="TimeSecs" runat="server"></asp:TextBox>
これはチェックボックスです –
<input type="CheckBox" id="LandingOver75m" class="regular-checkbox" onclick="MakeScoresZero()" runat="server" />
私が試したこと:
JavaScript は Web フォームの最後に記述されます
CheckBox がクリックされたときに実行される JavaScript コードは、「MakeScoresZero()」と呼ばれます。 チェックボックスをクリックしたときにコードが実行されることを確認するために、alert(“123”); の行を挿入してテストしました。 最初の行としてその中にあります。 それが機能する唯一の行です。
<script type="text/javascript"> function MakeScoresZero() { let Mins = document.getElementById("TimeMins"); Mins.Text = "0"; let Secs = document.getElementById("TimeSecs"); Secs.Text = "0"; } </script>
.Text の代わりに、.value、.innerHTML、.textContent も試しましたが、すべて成功しませんでした。
私はこれに何日も費やしており、非常にイライラしているので、助けていただければ幸いです。
解決策 1
以下はうまくいくはずです –
<script type="text/javascript"> function MakeScoresZero() { document.getElementById("TimeMins").value = 0; document.getElementById("TimeSecs").value = 0; } </script>
解決策 2
WebForms は、設定した ID を「マングル」して、ページ全体で一意であることを保証します。 これは、同じテンプレートを複数回繰り返す可能性があるデータ バインド コントロールでは特に重要です。
ブラウザーでページのソースを表示すると、コントロールの ID がマークアップで設定した ID と正確に一致していないことがわかります。
いくつかのオプションがあります。
1) スクリプトがページ内でインラインで定義されている場合は、式を使用して ClientID
スクリプトに:
<script type="text/javascript"> function MakeScoresZero() { let Mins = document.getElementById("<%= TimeMins.ClientID %>"); Mins.Text = "0"; let Secs = document.getElementById("<%= TimeSecs.ClientID %>"); Secs.Text = "0"; } </script>
2) 競合が絶対に起こらないと確信できる場合は、 ClientIDMode
に Static
:
<asp:TextBox CssClass="pcnt18right" type="number" min="0" style="width:10%; text-align:right" placeholder="00" ID="TimeMins" ClientIDMode="Static" runat="server"></asp:TextBox> <asp:TextBox CssClass="pcnt18right" type="number" min="0" Style="text-align: left;" ID="TimeSecs" ClientIDMode="Static" runat="server"></asp:TextBox>
ASP.NET 4.0 の ClientIDMode – Rick Strahl の Web ログ[^]
3) ID の完全一致を探すのではなく、ID を探します。 で終わる 期待値:
function MakeScoresZero() { let Mins = document.querySelector("input[id^='TimeMins']"); Mins.Text = "0"; let Secs = document.querySelector("input[id^=TimeSecs']"); Secs.Text = "0"; }
属性セレクター – CSS: カスケード スタイル シート | MDN[^]
4) 他の手段を使用してターゲット コントロールを特定します。たとえば、ダミーの CSS クラスを追加し、そのクラスを持つ要素を選択します。
[ad_2]
コメント