Java firefox a href#符号导致无法调用setter

Java firefox a href#符号导致无法调用setter,java,javascript,internet-explorer,firefox,struts2,Java,Javascript,Internet Explorer,Firefox,Struts2,早上好 这是周一清晨,我很难理解为什么下面这句话在IE中有效,而不是在FF中 <a class="button" href="#" onclick="setMaintenanceMode(false);">disable</a> 单击按钮时,将调用以下方法 function setMaintenanceMode(enabled) { var url = '<s:url action="secure/setMaintenanceMode"/>' + '

早上好

这是周一清晨,我很难理解为什么下面这句话在IE中有效,而不是在FF中

<a class="button" href="#" onclick="setMaintenanceMode(false);">disable</a>
单击按钮时,将调用以下方法

function setMaintenanceMode(enabled) {
    var url = '<s:url action="secure/setMaintenanceMode"/>' + '&ModeEnabled=' + enabled;
    document.location.href = url;
}
问题是,在IE中,struts操作“setSetCode()”上的方法被调用,但从FF调用的不是!如果我删除上面的hash ahref,FF可以工作,但是IE不能(href=“#”)工作

我已尝试将
'&ModeEnabled='
更改为
'&;ModeEnabled='
,但未成功。 我看过谷歌和struts论坛,但没有成功

我很想把所有的ahref都撕下来,换成Dojo按钮,看看这是否有效,但在此之前,我想知道是否有人能解释一下原因

我的猜测是,ahref是错误的东西使用,但为什么

如果有人能帮我理解为什么,我将不胜感激

谢谢 杰夫·波特

编辑:返回false是解决方案的一部分。问题似乎是url

/mainApp/secure/setMaintenanceMode.action?hardwareId=5&amp;storeCode=2571&ModeEnabled=true
具有
&在它里面,如果我按原样访问这个url,那么它在IE中工作,但在FF中不工作

<a class="button" href="#" onclick="setMaintenanceMode(false);">disable</a>
如果我将两者都更改为
&
,则它在IE&FF中工作

如果我将两者都更改为
&那么它在IE中仍然有效,但在FF中不起作用

有什么想法吗

注:


struts 2.0.9似乎不支持
上的属性
escapeAmp
,请尝试从javascript方法返回false

function setMaintenanceMode(enabled) {
    var url = '<s:url action="secure/setMaintenanceMode"/>' + '&ModeEnabled=' + enabled;
    document.location.href = url;
    return false;
}

<a class="button" href="#" onclick="return setMaintenanceMode(false);">disable</a>
功能设置维护模式(已启用){
var url=''+'和ModeEnabled='+已启用;
document.location.href=url;
返回false;
}

这将阻止javascript onclick事件到达浏览器。

尝试从javascript方法返回false

function setMaintenanceMode(enabled) {
    var url = '<s:url action="secure/setMaintenanceMode"/>' + '&ModeEnabled=' + enabled;
    document.location.href = url;
    return false;
}

<a class="button" href="#" onclick="return setMaintenanceMode(false);">disable</a>
功能设置维护模式(已启用){
var url=''+'和ModeEnabled='+已启用;
document.location.href=url;
返回false;
}
这将阻止javascript onclick事件到达浏览器。

onclick=“setMaintenanceMode(false);return false;”

onclick正在工作,但是href也立即工作。您需要从单击处理程序返回false,以表示不应遵循href

IE可能猜到了你的意思,做了错误的事情。

onclick=“setMaintenanceMode(false);return false;”

onclick正在工作,但是href也立即工作。您需要从单击处理程序返回false,以表示不应遵循href

(很可能猜到了你的意思,做了错事。)

URL具有
&在它里面,如果我按原样访问这个url,那么它在IE中工作,但在FF中不工作

<a class="button" href="#" onclick="setMaintenanceMode(false);">disable</a>
我对此表示怀疑 – 这两种情况都不应该发生。它不依赖于浏览器,而是依赖于服务器

字符串
a=b&;c=d
由服务器框架拆分为参数。Servlet要求仅使用
&
来分隔参数,因此它将返回
a
=
b
amp;c
=
d
。后一个参数显然不会被期望
c
的应用程序识别

HTML规范出于各种原因强烈建议
也可以用作分隔符,在这种情况下,您将得到
a=b
,没有等号的杂散
amp
将毫无意义并被丢弃,以及
c=d
。因此,尽管符号编码错误,它仍然可以工作。不幸的是,Servlet忽略了这一建议

默认情况下,请求参数将使用转义符号分隔(即,
&;

哦,天哪!真不幸。在将参数连接到URL时,不应跳过符号。您只需使用一个符号将参数连接起来,然后,如果需要将完成的URL放入文本内容的属性值中,HTML将对整个URL进行编码。Struts的默认行为在这里是错误的

在您的情况下,您不是将URL输出到属性值或文本内容,而是将其写入脚本块中的字符串文字:

var url = '<s:url action="secure/setMaintenanceMode"/>' + '&ModeEnabled=' + enabled;
URL具有
&在它里面,如果我按原样访问这个url,那么它在IE中工作,但在FF中不工作

<a class="button" href="#" onclick="setMaintenanceMode(false);">disable</a>
我对此表示怀疑 – 这两种情况都不应该发生。它不依赖于浏览器,而是依赖于服务器

字符串
a=b&;c=d
由服务器框架拆分为参数。Servlet要求仅使用
&
来分隔参数,因此它将返回
a
=
b
amp;c
=
d
。后一个参数显然不会被期望
c
的应用程序识别

HTML规范出于各种原因强烈建议
也可以用作分隔符,在这种情况下,您将得到
a=b
,没有等号的杂散
amp
将毫无意义并被丢弃,以及
c=d
。因此,尽管符号编码错误,它仍然可以工作。不幸的是,Servlet忽略了这一建议

默认情况下,请求参数将使用转义符号分隔(即,
&;

哦,天哪!真不幸。在将参数连接到URL时,不应跳过符号。您只需使用一个符号将参数连接起来,然后,如果需要将完成的URL放入文本内容的属性值中,HTML将对整个URL进行编码。Struts的默认行为在这里是错误的

在您的情况下,您不是将URL输出到属性值或文本内容,而是将其写入脚本块中的字符串文字:

var url = '<s:url action="secure/setMaintenanceMode"/>' + '&ModeEnabled=' + enabled;

除非您
返回setMaintenanceMode(…
除非您
返回setMaintenanceMode(…
我认为您两人都是正确的,但这不是完整的解决方案。请参阅qu中我的新注释