ページに select 要素を含むゾーンがあります。
onChange
JavaScriptを介してその要素にリスナーを追加しています( http://jsfiddle.net/AnbmU/6/に感謝します)
void afterRender() {
javaScriptSupport.addScript(
"$('groupSelecter').observe('change', function() {" +
" var width = $(this).getWidth();" +
" var selectBox = $('groupSelecter');" +
" var chosen = selectBox.selectedIndex >= 0 ? selectBox.options[selectBox.selectedIndex].innerHTML : undefined;" +
" $(this).next('.ninja-input')" +
" .toggleClassName('hidden', chosen != 'Create New Group...')" +
" .select();" +
"});",
""
);
}
ゾーンの更新をトリガーすると問題が発生し、選択がid
次のように変更されますgroupSelecter_846e54edd0b5
。
select の要素 ID を一定に保つ方法や、ゾーンの更新ごとに javascript と select の ID を変更できる方法はありますか?
編集:以前は知らなかった別の問題。
非表示の入力フィールドは、その内容に関係なく、選択した要素が 2 番目に変更されるたびに切り替わります。たとえば、 、 、および が最初に選択されていてGROUP_1
、GROUP_2
にGROUP_3
変更Create New Group...
さGROUP_1
れたGROUP_2
場合、入力ボックスが表示されます。に変更するとCreate New Group...
、入力が再び非表示になります。再び に変更するGROUP_3
と、入力フィールドが表示されます。JSfiddle では、これで問題なく動作します。しかし、何らかの理由で、Tapestry プロジェクトでは機能しません。
EDIT2:わかりました、もう少しいじってみました:
タペストリーで生成された select 要素とid=groupSelecter_d769af562f89
. また、この JavaScript を (HTML の下部に) 挿入して生成しました。
$$('.groupSelecter').invoke('observe', 'change', function() {
var width = $(this).getWidth();
var chosen = $(this).selectedIndex >= 0 ? $(this).options[$(this).selectedIndex].innerHTML : undefined;
$(this).next('.ninja-input')
.toggleClassName('ninja-hidden', chosen != 'Create New Group...');
});
Firefox で要素を検査し、タグに移動して、生成されたコードを見つけて切り取りました。その後、firefox JS コンソールを開き、先ほど切り取ったコードとまったく同じコードを貼り付けました。そして、出来上がり、何らかの理由で機能します。(クラス選択、つまり)。