2

すべて選択チェックボックスを使用して、チェックボックスの列を選択しようとしています。

そこで、一度にチェックしたいすべてのものに同じ名前のABoxesElementを付けて、JavaScript ですべてを簡単にチェックできるようにしました。

ただし、firefox で firebug を使用すると、チェックボックスに指定した名前が保持されず、コンポーネント名が前に追加され、チェックボックスに自動インクリメント番号が追加されていることがわかります。

getElementByName で正規表現を使用できないため、複数のチェックボックスで同じ値を設定するにはどうすればよいですか。(IDは別の目的で使用されます)..ここに私のコードがあります:

すべて選択チェックボックス

<dmf:checkbox
name="ABoxes"
onclick = 'selectAllACheckBoxes'
id="allABoxes"  
runatclient="true"/>

チェックしたいチェックボックスの例

<dmf:checkbox  
name="ABoxesElement" 
id="<%=...%>" 
runatclient="true"/>

****Javascriptの例****

function selectAllCheckBoxes(source) {
var checked = source.checked 
var cbName = source.name + 'Element';  
var col = document.getElementsByName(cbName);

for (var i=0; i<col.length;i++) 
{
col[i].checked = checked;
col[i].disabled = !checked;                         
} 
}       

ただし、ページがレンダリングされると、個々のチェックボックスの名前がABoxesElementではなく、 component_nameAboxesElement_2のようなものであるため、getElementsByName が正規表現を受け入れることができない限り、スクリプトは機能しません。

これを回避する方法についてのアイデアはありますか?

チェックボックスのtldには別の属性があります

  <attribute>
     <name>datafield</name>
     <required>false</required>
     <rtexprvalue>true</rtexprvalue>   </attribute>

それを使用して「名前」を保存し、それを介して要素にアクセスできますか?

個々のチェックボックスの EDIT HTML OUTPUT

<input type="hidden" value="true" id="a1ON_hidden" name="mform_content_AboxesElement_hidden_2"/>
    <input type="checkbox" onclick="setKeys(event);safeCall(selectAllCheckBoxes,this);" value="" title="Click here" id="a1ON" name="form_content_AboxesElement_2"/>

selectall チェックボックスの EDIT 2 HTML OUTPUT

<input type="hidden" name="mform_content_ABoxes_hidden_1" id="allABoxes_hidden" value="true"/>
<input type="checkbox" name="mform_content_ABoxes_1" id="marketsAll" title="Click to select" value="" onclick="setKeys(event);safeCall(selectAllCheckBoxes,this);"/>
4

2 に答える 2

1

キックオフは次のとおりです。

function selectAllCheckboxes(checkboxElement) {
    var allFormElements = checkboxElement.form.elements;
    for (var i = 0; i < allFormElements.length; i++) {
        var formElement = allFormElements[i];
        if (formElement.name.indexOf('mform_content_ABoxes_') == 0) { // Check if its name starts with particular string.
            formElement.checked = checkboxElement.checked;
        }
    }
}

最終的には'mform_content_ABoxes_'、を別の関数の引数として渡すことができます。また、属性checkboxElement.nameの生成に使用されるパターンがわかっている場合は、そこから抽出することもできます。name

于 2009-12-23T20:21:14.723 に答える
1

このdatafield属性は、オブジェクト プロパティ ( など) をデータとしてコントロールに提供するために使用されますがr_object_idr_version_labelこの場合はあまり役に立ちません。

runatclient="false"dmf タグに設定し、対応するコンポーネントで別の名前でチェックボックスを参照することは、完璧ではない解決策です。次に、javascript の代わりに、コンポーネント クラスで Java メソッドを使用してチェックボックスのハンドルを取得し、それらの値を変更できます。チェックボックスの WDK 生成された name 属性は、コンポーネント名とおそらく JSP での順序に依存するため、WDK が常にチェックボックスに同じ名前を生成すると仮定するのが良い考えかどうかはわかりません。ただし、コンポーネント クラスでの処理は常に JavaScript 関数よりも遅くなります。

于 2009-12-23T11:10:46.960 に答える