我正在尝试使用java中的w3c.dom.events处理按钮上的click事件,但是我得到错误"无法对非静态方法进行静态引用addEventListener"请帮帮我。这是我的代码。
Node button = form.getElementsByTagName("button").item(0);
if(button!=null && button.hasAttributes()){
NamedNodeMap attr = button.getAttributes();
for(int j=0; j<attr.getLength(); j++){
Attr atribute = (Attr)attr.item(j);
if(atribute.getValue().equals("submit")){
System.out.println("submit button detected.");
org.w3c.dom.events.EventListener listener = new org.w3c.dom.events.EventListener(){
@Override
public void handleEvent(org.w3c.dom.events.Event evt) {
System.out.println("this is a action listener.");
}
};
((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false); //here i am getting the error
}
}
}
答案 0 :(得分:0)
您收到的错误&#34;无法对非静态方法进行静态引用addEventListener&#34;手段:
方法:addEventListener
不是静态方法 - 这意味着你不能直接从它的类中调用它,你需要创建一个实现&#39; EventTarget&#39;叫它。
((EventTarget) button)org.w3c.dom.events.EventTarget.addEventListener("click", listener, false);
因此,如果我们分解这行代码,我们就有:在对象上强制转换为&#39;按钮&#39;:(EventTarget)button
,然后在方法调用{{1返回(void)。所以计算机看到的基本上是你在addEventListener
接口内调用了方法addEventListener
(这是不可能的错误,因为方法是非STATIC你不能直接从类/接口调用它)然后你输入它来输入EventTarget
。
另请注意:接口中的静态方法不能存在。
要解决此问题,只需使用您创建的按钮对象添加EventTarget
:
Eventlistener
因此,在这种情况下,您将按钮类型转换为EventTarget。请注意((EventTarget)button).addEventListener("click", listener, false);
,它允许您现在将事件侦听器添加到对象(按钮)。
答案 1 :(得分:0)
进口存在问题。这是我解决和修改过的代码。
`public class DetectForm {
private HTMLInputElement password = null;
private HTMLInputElement username = null;
private boolean isForm = false;
public void detect(Document doc){
if (doc!=null && doc.getElementsByTagName("form").getLength() > 0) {
HTMLFormElement form = (HTMLFormElement) doc.getElementsByTagName("form").item(0);
NodeList nodes = form.getElementsByTagName("input");
for (int i = 0; i < nodes.getLength(); i++) {
if(nodes.item(i).hasAttributes()){
NamedNodeMap attr = nodes.item(i).getAttributes();
for (int j=0 ; j<attr.getLength();j++){
Attr atribute = (Attr)attr.item(j);
if(atribute.getValue().equals("password")){
System.out.println("Password detected");
password = (HTMLInputElement) nodes.item(i);
username = (HTMLInputElement) nodes.item(i-1);
// password.setValue("helloword");
// username.setValue("helloword");
isForm = true;
}
}
}
}
EventListener listener = new EventListener() {
@Override
public void handleEvent(Event evt) {
System.out.println("action listener from DOM.");
if(username!=null && password!=null){
String user = username.getValue();
String pass = password.getValue();
}
}
};
if(isForm){
Node button = form.getElementsByTagName("button").item(0);
if(button!=null && button.hasAttributes()){
NamedNodeMap attr = button.getAttributes();
for(int j=0; j<attr.getLength(); j++){
Attr atribute = (Attr)attr.item(j);
if(atribute.getValue().equals("submit")){
System.out.println("submit button detected.");
((EventTarget) button).addEventListener("click", listener, false);
}
}
}
}
}
}
}
`