我无法实例化HtmlHiddenInput并将appendChild方法用于表单对象,因为前者没有构造函数。有没有更好的方法,而不是在JavaScript中这样做?我想禁用javascript以节省资源。
答案 0 :(得分:3)
这是正式的做法:
// where htmlPage is the current page you're on
// and internalForm is the form you want to append the field to
HtmlElement createdElement = htmlPage.createElement("input");
createdElement.setAttribute("type", inputName);
createdElement.setAttribute("name", name);
createdElement.setAttribute("value", value);
internalForm.appendChild(createdElement);
答案 1 :(得分:0)
理想情况下,我希望能够编写(其中f是HtmlForm,p是HtmlPage,b是WebClient):
HashMap a = new HashMap();
a.put("name", "concealed");
a.put("value", "secret");
f.appendChild(new HtmlHiddenInput(p,a));
但是由于HtmlHiddenInput无法实例化,我不得不回避JavaScript,这更慢,更丑陋:
bool j = b.isJavaScriptEnabled();
if (!j) { b.setJavaScriptEnabled(true); }
p.executeJavaScript(
"{" +
" var" +
" d = document," +
" i = d.createElement('input');" +
" with (i) {" +
" name = 'concealed';" +
" type = 'hidden';" +
" value = 'secret';" +
" }" +
" d.getElementsByName('form1')[0].appendChild(i);" +
"}");
if (!j) { b.setJavaScriptEnabled(false); }
恕我直言,有时候太严格的限制会妨碍你。我没有看到为什么禁止实例化HtmlHiddenInput的充分理由。
答案 2 :(得分:0)
我遇到了与HtmlFileInput相同的问题,并通过InputElementFactory找到了解决方法:
HtmlPage page;
...
AttributesImpl attrs = new AttributesImpl();
attrs.addAttribute("", "type", "type", "", "hidden");
HtmlElement el = InputElementFactory.instance.createElement(page, "input", attrs);
HtmlHiddenInput hiddenInput = (HtmlHiddenInput) el;