ここ 2 日間、HTML でさまざまなコントロールを操作するためにスクリプトを使用する方法を友人が尋ねているのを見かけました。今回は、それを自分自身でまとめてみます。プロジェクトの都合上、多くのプログラムは VBScript で書かれていますので、興味のある方はぜひ JavaScript に書き換えてください。
さて、本題に移りましょう。
今日は、選択されたチェック ボックスの数と選択されたチェック ボックスの値を決定する VBScript の使用法を紹介します。
注文リストなどのリストを作成する場合、各注文レコードの前にチェックボックスを配置して、一括削除や一括発行などの機能を提供する場合があります。通常、各チェック ボックスの値は、注文番号など、対応するレコードの主キーの値です。削除や解放などの機能を実行する場合、チェックボックスがいくつ選択されているか、そしてそれらのチェックボックスがどの値に対応しているかを知る必要があります。その方法を以下に説明します。
プログラムは 3 つの部分に分かれています。
1. 選択された CheckBox が 1 つであるか複数であるかを判断します。
主な考え方は次のとおりです。たとえば、同じ名前で ID が異なる複数のチェック ボックスがある場合、チェック ボックス コントロールには名前が付けられます。たとえば、chkTest という名前の 3 つのチェック ボックスがあり、その ID が chkTest1、chkTest2、および chkTest3 である場合、3 つのチェック ボックスのチェックされた属性を表示します。 chkTest(0).checked 、 chkTest(1).checked、chkTest(2).checked (配列は 0 から始まります) と記述する必要があります。チェック ボックスが 1 つしかない場合は、 chkTest.checked を直接使用できます。これにより、異なる番号 (1 つ以上) については、チェック ボックス情報を取得するためにのみ異なるメソッドを使用できることが決まります。同じ名前で異なる ID を持つ複数のコントロールがある場合、そのコントロールには「コントロール名.タイプ」というプロパティがあり、この読み取り専用プロパティは任意の文字列と等しくなります。つまり、コントロール名.タイプ = "任意の文字列" 定数は true です。もちろん、これはコントロールの name.type 属性がある場合のみで、それ以外の場合は常に false となるため、リスト内のチェック ボックスが単一か複数かを区別できます。手順は次のとおりです。
「*******************************************」 ***** ***
'<関数名>
' gfIs_ArrayTest(obj)
'<関数>
' 選択されたチェックボックスが 1 つであるか複数であるかを判断します
'<パラメータ>
' チェックボックスオブジェクト名
'<戻り値>
' 真実
' 間違い
'<備考>
' 2004 年 3 月 15 日に AITD によって作成
「************************************************
関数 gfIs_ArrayTest(obj)
エラー時は次から再開
obj.type = "フラグ" の場合
gfIs_ArrayTest = True
それ以外
gfIs_ArrayTest = False
終了する場合
画面上のチェックボックスの選択が要件を満たしているかどうかを確認します。
いわゆる準拠
とは、たとえば、削除する場合は少なくとも 1 つのレコードを選択し、修正する場合は 1 つのレコードのみを選択することを意味します。その他、何を 5 項目しか選択できない、10 項目しか選択できない、など。 以下の手順を次のように変更するだけです。先ほど述べたことを忘れないでください。1 つのチェックボックスのみを処理する場合と複数のチェックボックスを処理する場合は、さまざまな方法があります。
'************************************************ * ****
'<関数名>
' gfChkCheckbox()
'<関数>
' 画面チェックボックスの選択が要件を満たしているかどうかを確認します
'<パラメータ>
' obj: 対応するチェックボックス コントロール
'flag: チェックルール: 0 は複数選択可能
' 1 1 つだけ選択できます
' name: どのコントロールがエラーを報告したかに関する情報をユーザーに表示します
'<戻り値>
' 真実
' 間違い
'<備考>
' 2004 年 3 月 15 日に AITD によって作成
'************************************************ * ****
関数 gfChkCheckbox(obj,フラグ,名前)
ディム・アイ
j
gfChkCheckbox = false
i = 0
j = 0
'オブジェクトが存在しない場合
isnull(obj) の場合
msgbox "「 + 名前 + "を選択してください。」 'オブジェクトを選択してください。
gfChkCheckbox = false
終了関数
終了する場合
「オブジェクトは 1 つだけです
gfIs_ArrayTest(obj) でない場合は、
obj.checked = false の場合
msgbox "「 + 名前 + "を選択してください。」 'オブジェクトを選択してください。
gfChkCheckbox = false
終了関数
それ以外
gfChkCheckbox = true
終了関数
終了する場合
end if
i = 0 ~ (obj.length - 1) に
複数のオブジェクトが存在する場合
obj(i).type = "チェックボックス" の場合
obj(i).checked = true の場合
j=j+1
終了する場合
終了する場合
次
j = 0 の場合
msgbox "「+ 名前 + "を選択してください。」 'オブジェクトを選択してください。
gfChkCheckbox = false
終了関数
終了する場合
j = 1 の場合
gfChkCheckbox = true
終了関数
終了する場合
j > 1 の場合
フラグ = 1 の場合
msgbox "「 + 名前 + " は 1 つだけ選択できます。」 '選択できるオブジェクトは 1 つだけです。
gfChkCheckbox = false
終了関数
それ以外
gfChkCheckbox = true
終了関数
終了する場合
end if
end function
3. チェック ボックスの
値
を取得します。後の処理の便宜のために、重要な情報は、後でアクセスできるようにチェック ボックスの value 属性に保存されることがよくあります。次のプログラムは、選択されたチェック ボックスの値を区切り文字「^|^」を使用して文字列に変換し、それを返します。
「************************************************
'<関数名>
'gfGetCheckBoxValue(obj)
'<関数>
'選択されたチェックボックスの値を取得します
'<パラメータ>
' チェックボックスオブジェクト名
'<戻り値>
'選択したチェックボックスの値
'<備考>
' 2004 年 3 月 15 日に AITD によって作成
「************************************************
関数 gfGetCheckBoxValue(obj)
dim strValue
dim intカウンター
dim i
strValue = ""
intCounter = 0
'オブジェクトが存在しない場合
isnull(obj) の場合
gfGetCheckBoxValue = strValue
終了関数
end if
'オブジェクトが
gfIs_ArrayTest(obj) でない場合は、
obj.checked = false の場合
gfGetCheckBoxValue = strValue
終了関数
それ以外
gfGetCheckBoxValue = obj.value
終了関数
終了する場合
end if
'オブジェクトが複数の場合
for i = 0 から obj.length - 1
obj(i).checked = true の場合
intCounter > 0 の場合
strValue = strValue & "^|^" & CStr(obj(i).value)
それ以外
strValue = CStr(obj(i).value)
終了する場合
intCounter = intCounter + 1
終了する場合
次の
gfGetCheckBoxValue = strValue
end関数は
VBScriptでチェックボックスを処理するメソッドです(たまに使います)。これらの関数は、共通の vbs ファイルにカプセル化して、html の <head> タグ領域で参照して、 <head><script language=vbscript src=vbsChkBoxTool.vbs></script> </ などの汎用にすることができます。 head>
また、実際のアプリケーションでは、クエリ条件に基づいて生成されたリストにレコードが 1 つも存在しない場合があります。つまり、そのような名前のコントロールが呼び出された場合、IE にはチェック ボックス コントロールが存在しません。エラーが報告されます。良い解決策がなかったので、チェックボックス コントロールを使用せずにこの状況を回避するプログラムを作成しました:
function sIsChkBoxExist()
エラー時は次から再開
エラークリア
if isEmpty(document.frmOrderList.chkOrder) then
終了する場合
if err.number <> 0 then
それ以外
sIsChkBoxExist=true
終了する場合
エラークリア
終了関数
プログラムでは、isEmpty などの所定のコントロールに対して何らかの操作を実行します。err.number>0 がキャプチャされた場合は、コントロールが存在しないことを意味します。ただし、次はエラー再開があるため、エラーは発生しません。これは、コントロールが存在するかどうかを決定するものでもあります。
上記の 3 つの関数を呼び出す前に毎回、エラーが発生しないように sIsChkBoxExist 関数を 1 回呼び出して、対応するコントロールが存在するかどうかを確認します。