Javascript IF在Chrome中返回True,但在Safari中返回False

Javascript IF在Chrome中返回True,但在Safari中返回False,javascript,function,if-statement,cross-browser,compatibility,Javascript,Function,If Statement,Cross Browser,Compatibility,我的javascript函数在Chrome/Firefox和Safari/Opera中的计算结果不同。关于我展示/隐藏的总体目标,有很多答案。我不想在这种情况下使用jQuery。无论如何,我想解决的主要问题是,条件在所有浏览器中返回的结果都不相同 $("[name=sub_type]:checked").val() // or document.querySelector("[name=sub_type]:checked").value // or var theValue; var elems

我的javascript函数在Chrome/Firefox和Safari/Opera中的计算结果不同。关于我展示/隐藏的总体目标,有很多答案。我不想在这种情况下使用jQuery。无论如何,我想解决的主要问题是,条件在所有浏览器中返回的结果都不相同

$("[name=sub_type]:checked").val()
// or
document.querySelector("[name=sub_type]:checked").value
// or
var theValue;
var elems = document.getElementsByName("sub_type");
for (var i = 0; i < elems.length; ++i) {
    if (elems[i].checked) {
        theValue = elems[i].value;
        break;
    }
}
如果我在Chrome或Firefox中运行我的代码,我会收到警告:“Foo-New Function run。” 如果我在Safari或Opera中运行相同的代码,我会收到警告:“Foo-Else函数已运行。”

我不知道为什么这是特定于浏览器的。我很乐意去阅读一些额外的线程或文档,如果这是在别处解决的话,但我似乎无法理解

//编辑:根据请求,代码简化为仅显示相关部分

功能条(){
var addGiftVal=document.forms[“subscribe”][“addGift”].value;
如果(addGiftVal==“是”){
警报(“条-是函数已运行”);
}
否则{
警报(“Bar-Else函数已运行”);
}
}
函数foo(){
var SUBTIVAL=document.forms[“subscribe”][“sub_type”]。值;
var subShipVal=document.forms[“subscribe”][“ship\u address\u check”]。值;
如果(子类型值==“续订”){
警报(“Foo-续订功能已运行”);
}
else if(SubsubVal==“新建”){
警报(“Foo-新函数已运行”);
}
否则{
警报(“Foo-Else函数已运行”);
}
}

新的
更新
礼物

同样的

不同的

是还是不是

对 不
问题在于您没有将“this”传递给函数。试着打印出SubsubVal的值,看看我的意思——你会注意到,在Safari中,它返回一个HTML元素列表,而在Chrome中,它(正确或错误地)推断你想要单击的元素

要解决此问题,请将“this”传递到函数中,如下所示:

续订
文档。表单[“订阅”][“子类型”]为您提供元素集合,而不仅仅是所选元素。Chrome似乎允许您在此集合上调用
.value
,并获取所选值,但有些浏览器没有(我没有Safari,但IE也失败了)。无论如何,对集合调用
.value
不是正确的方法

您可以通过调用以下命令查看此操作:

document.forms["subscribe"]["sub_type"]

从浏览器开发工具控制台中

您需要使用该策略来正确地获取选中的值。如果您不使用jQuery,那么您要么通过在整个组中循环找到选中的一个,要么使用querySelector(如果您不关心旧浏览器的话)

$("[name=sub_type]:checked").val()
// or
document.querySelector("[name=sub_type]:checked").value
// or
var theValue;
var elems = document.getElementsByName("sub_type");
for (var i = 0; i < elems.length; ++i) {
    if (elems[i].checked) {
        theValue = elems[i].value;
        break;
    }
}
$(“[name=sub_type]:选中”).val()
//或
document.querySelector(“[name=sub_type]:选中”).value
//或
var值;
var elems=document.getElementsByName(“子类型”);
对于(变量i=0;i
什么是文档。表单[“订阅”][“子类型”]?它是一个复选框、下拉框、输入框、隐藏框吗?你能把这段代码切碎成一个容易复制的小例子吗?是“sub_type”选择框吗?@user2733283 sub_type是一个可见的无线电输入形式。@DesignBloke:记录你的值以找出问题所在。这是基本的调试。当我遇到问题时,我实际上是在传递这个消息,但是在撕下一些头发并阅读了更多的问题后,我尝试了上面的方法,看看这是否有帮助。Chrome/Firefox——不管是好是坏——似乎并不在乎我是否使用它,是否添加/删除分号,等等。Safari无论是否使用它们都不起作用。谢谢你的例子。当我在Firefox(34.0.5)的Mac(10.7.5)上运行JSFIDLE时,它返回“Boo:renewal”。但是,当我在Safari(6.1.6)中运行它时,它返回“Boo:undefined”。