我使用javascript从客户端使用未绑定到wicket组件的按钮获取值(即,它没有wicket-id)。现在,我需要将该值设置为textfield(textarea) - 这是一个wicket组件,但无法做到这一点。如果我在一个简单的textarea(不是wicket组件)中设置值,那么它工作正常。但我需要在wicket组件中使用该值,以便在表单提交时获取其值。
Javascript无法处理wicket组件。
Javascript方法:
var text2 = document.getElementById("e2");
var text1 = document.getElementById("e1");
text1.value = "hello";
text2.value = "hello";
HTML:
<wicket:panel>
<form wicket:id="form" id="form" onsubmit="submit(event,this);">
<div wicket:id="myPanel">
<input type="button" value="Verify" name="B3" onclick=GetTemplate() />
<p><textarea name="S2" id="e2"></textarea></p>
<p><textarea wicket:id="e1" name="S1" id="e1" ></textarea></p>
<input type="submit" class="submitForm" wicket:id="submit" wicket:message="value:Submit" name="submit" />
</div>
</form>
</wicket:panel>
爪哇:
public class MyPanel extends Panel {
public MyPanel(...){
...
Form<?> form = new Form("form", new Model());
container = new WebMarkupContainer("myPanel");
textArea = new TextArea<String>("e1", new Model());
textArea.setEnabled(true).setOutputMarkupId(true).
textArea.setOutputMarkupPlaceholderTag(true);
textArea.setEscapeModelStrings(false);
textArea.add(new ErrorIndicator());
submitButton = (Button) new Button("submit") {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit() {
message = textArea.getModelObject();
}
}.setEnabled(true);
container.add(textArea);
container.add(submitButton);
form.add(container);
add(form);
}
在这里,我可以在textarea id = e2中设置值,但不能在id = e1上设置值。
答案 0 :(得分:2)
问题来自这条线:
textArea.setEnabled(true).setOutputMarkupId(true)
这将为TEXTAREA(针对Wicket Ajax)生成自定义ID。因此,id
已更改,您的javascript不再有效,因为它使用了&#39; e1&#39;被替换的id。
您可以添加自定义数据属性并按该属性获取组件。
例如:
<p><textarea wicket:id="e1" name="S1" data-id="e1" ></textarea></p>
然后(例如,使用jquery,类似这样的事情)
$("TEXTAREA[data-id='e1']").val("hello");
或者,如果您不需要ajax,请跳过调用setOutputMarkupId