我的页面上有一个包含选择元素的区域。
我正在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
.
有没有办法让选择的元素 id 保持不变或能够在每次区域更新时更改 javascript 和选择的 id?
编辑:另一个我以前不知道的问题。
无论其内容如何,隐藏的输入字段都会在所选元素的第二次更改中切换一次。例如,如果我最初选择了GROUP_1
、和GROUP_2
,然后更改为,则会出现输入框。当我将其更改为 时,输入再次被隐藏。同样,当我更改为 时,会出现输入字段。请注意,在 JSfiddle 中,这很好用。但由于某种原因,它在我的 Tapestry 项目中不起作用。GROUP_3
Create New Group...
GROUP_1
GROUP_2
Create New Group...
GROUP_3
EDIT2:好的,我尝试了更多的摆弄:
Tapestry 使用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 控制台并粘贴了我刚刚剪切的完全相同的代码。而且,瞧,它工作,出于某种原因。(即类选择)。