gpt4 book ai didi

从 Wicket Java 进行 JavaScript 函数调用失败

转载 作者:行者123 更新时间:2023-11-29 16:27:15 25 4
gpt4 key购买 nike

我在从 Wicket Java 代码调用 JavaScript 时遇到了麻烦。我有一个带有两个文本字段、一个按钮和一个隐藏字段的表单。我想使用 JavaScript 连接文本字段的文本,并在单击该按钮时将连接的文本设置为隐藏字段。

这是我的代码:

Java:

Form form = new Form("field");
form.setOutputMarkupId(true);


TextField textField1 = new TextField("field1");
textField1.setOutputMarkupId(true);
form.add(textField1);

TextField textField2 = new TextField("field2");
textField2.setOutputMarkupId(true);
form.add(textField2);

HiddenField hiddenField = new HiddenField("hiddenField");
hiddenField.setOutputMarkupId(true);
form.add(hiddenField);

Button concatButton = new Button("concat");
concatButton.add(new SimpleAttributeModifier("onclick", "concat"));
form.add(concatButton);

JavaScript:

<script type="javascript">
function concat() {
var val1=document.getElementById("field1").value;
var val2=document.getElementById("field2").value;
document.getElementById("hiddenField").value=val1+val2;
}
</script>

但是它不起作用。任何信息都会对我非常有帮助。谢谢。
注意:我也尝试过 AjaxSubmitButton,但这给了我一个错误。

最佳答案

TextField.setOutputMarkupId() 会让组件打印 id 属性,但 id 属性默认与组件 id 不同(第一个字符串参数总是在构造函数中传递),但是是生成的。

试试这个:

textField1.setMarkupId("field1");
textField2.setMarkupId("field2");
hiddenField.setMarkupId("hiddenField");

而且,如果您不在服务器端使用 TextFields 的值(仅使用hiddenField 值),您也根本无法将它们添加为 Wicket 组件,而将它们保留为静态 HTML(具有固定 ID) )。

[编辑以通过示例提高清晰度]

另一个选项是使用生成的 ID 生成脚本(或对函数的调用):

HomePage.java

public class HomePage extends WebPage {
public HomePage() {
Component field1 = new TextField("field1").setOutputMarkupId(true);
Component field2 = new TextField("field2").setOutputMarkupId(true);
Component hidden = new HiddenField("hidden").setOutputMarkupId(true);

String script = String.format("concatValues('%s','%s','%s');",
field1.getMarkupId(), field2.getMarkupId(), hidden.getMarkupId());
Component concat = new Button("concat").add(new SimpleAttributeModifier("onclick", script));

Component show = new Button("show").add(new SimpleAttributeModifier("onclick",
String.format("alert(document.getElementById('%s').value);", hidden.getMarkupId())));

add(new Form("form").add(field1, field2, hidden, concat, show));
}
}

主页.html

<html xmlns:wicket="http://wicket.apache.org">
<head>
<script type="text/javascript">
function concatValues(field1Id, field2Id, hiddenId) {
document.getElementById(hiddenId).value = document.getElementById(field1Id).value + document.getElementById(field2Id).value;
}
</script>
</head>
<body>
<form wicket:id="form">
<input wicket:id="field1">
<input wicket:id="field2">
<input wicket:id="hidden" type="hidden">
<input wicket:id="concat" type="button" value="Concat">
<input wicket:id="show" type="button" value="Show hidden value">
</form>
</body>
</html>

现在,一个使用 Ajax 执行此操作的示例(concat 操作在服务器上完成,而不是在 javascript 中完成):

HomePage.java

public class HomePage extends WebPage {
String field1;
String field2;
String hidden;
public HomePage() {
Form form = new Form("form", new CompoundPropertyModel(this));
form.add(new TextField("field1"));
form.add(new TextField("field2"));
form.add(new HiddenField("hidden"));
form.add(new AjaxButton("concat") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
hidden = field1 + field2;
target.addComponent(form);
}
});
form.add(new AjaxButton("show") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.appendJavascript("alert('" + JavascriptUtils.escapeQuotes(hidden) + "')");
}
});
add(form);
}
}

主页.html

<html xmlns:wicket="http://wicket.apache.org">
<body>
<form wicket:id="form">
<input wicket:id="field1">
<input wicket:id="field2">
<input wicket:id="hidden" type="hidden">
<input wicket:id="concat" type="button" value="Concat">
<input wicket:id="show" type="button" value="Show hidden value">
</form>
</body>
</html>

关于从 Wicket Java 进行 JavaScript 函数调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com