フォームデータのリセット/クリア、フォーカスボタン
-
10-07-2019 - |
質問
私はこれらすべてに慣れていないので、優しくしてください!わかりました。現在、次のシナリオがあります。
製品の詳細を検索するには3つの方法があります:
-
カスケードドロップダウンリスト(ddlbuyer、ddlSub、ddlProd)および関連するラジオボタン(radProd)
-
製品情報(txtPrdAC)を検索するオートコンプリートテキストボックス
-
ユーザーが表示したいアイテムの数(txtHowMany)を入力し、表示したいサブカテゴリ(radTopx)を指定する製品リスト検索
理想的なのは、次のような状況です。
ユーザーは、上記のリストにある製品を検索する方法の1つのみを使用できます。最初のddlをクリックすると、テキストボックスに存在する可能性のあるデータはすべて消去されます。同様に、txtPrdACまたはtxtHowManyをクリックすると、ddlリストに存在していた情報はすべて消去され、元のデフォルト値に戻ります。
C#コードビハインドでこれを行いたいと思います。とにかく、ラジオボタンのフォーカスを設定します。
ddlProd.Attributes.Add("onchange", "return SetRadioFocus('"
+ radBuyer.ClientID + "');");
radTopx.Attributes.Add("onclick", "return SetRadioFocus('"
+ radTopx.SelectedItem + "');");
tbxProdAC.Attributes.Add("onclick", "return SetRadioFocus('"
+ radProd.ClientID + "');");
ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", @"
function SetRadioFocus(target)
{
document.getElementById(target).checked = true;
}", true);
ただし、テキストボックスやddlなどの特定の要素がまだ不足しています。 繰り返しますが、無知をおforびしますが、これは私を投げました。助けてくれてありがとう。
解決
この問題の完全な解決策はかなり複雑になる可能性がありますが、あなたが求めていることを行うと思う簡単な解決策は次のようになります:
ddlProd.Attributes.Add("onchange", "ResetDefaults('"+ddlProd.ClientID+"'); SetRadioFocus('"
+ radBuyer.ClientID + "');");
radTopx.Attributes.Add("onclick", "ResetDefaults('"+radTopx.ClientID+"'); SetRadioFocus('"
+ radTopx.SelectedItem + "');");
tbxProdAC.Attributes.Add("onclick", "ResetDefaults('"+tbxProdAC.ClientID+"'); SetRadioFocus('"
+ radProd.ClientID + "');");
ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", @"
function ResetDefaults(exclude)
{
if(exclude != '" + ddlProd.ClientID + @"') document.getElementById('" + ddlProd.ClientID + @"').value = null;
if(exclude != '" + txtPrdAC.ClientID + @"') document.getElementById('" + txtPrdAC.ClientID + @"').value = "";
if(exclude != '" + txtHowMany.ClientID + @"') document.getElementById('" + txtHowMany.ClientID + @"').value = "";
}
function SetRadioFocus(target)
{
document.getElementById(target).checked = true;
}", true);
それは言われていることですが、これがまさにあなたが望む振る舞いなのかどうかはわかりません。ユーザーがこれらのテキストボックスのいずれかをクリックするたびに、他のすべてのコントロールの値がクリアされるため、これらのフィールドが相互に排他的であり、ユーザーがそれらの1つにデータを入力することになっています。そうでない場合は、特定の条件下でのみ制御値をクリアするために、このロジックを改良することを検討する必要があります。
また、onclickの代わりにonblurイベントを使用することもできます。ユーザーは、クリックする代わりにコントロールにフォーカスを移動できます。その場合、onclickイベントが発生することはないと思います。 onblurイベントは、フォーカスがコントロールを離れるたびにトリガーされます。また、ユーザーが実際にコントロールの値に変更を加えたかどうか、または単にコントロールに焦点を合わせてから去ったかどうかを検出できるjavascriptコードを追加する必要がある場合があります。