Java firefox a href#符号导致无法调用setter
早上好 这是周一清晨,我很难理解为什么下面这句话在IE中有效,而不是在FF中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"/>' + '
<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&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中我的新注释