IF 在 Chrome 中返回 true,但在 Safari 中返回 false
IF Returns True in Chrome, but False in Safari
我的javascript函数在Chrome/Firefox与Safari/Opera中的计算方式不同。关于我显示/隐藏的总体目标有很多答案(即这里)。在这种情况下,我宁愿不使用jQuery。无论如何,我想解决的主要问题是条件在所有浏览器中都返回相同的内容。
如果我在Chrome或Firefox中运行我的代码,我会收到警报:"Foo-新功能运行。如果我在 Safari 或 Opera 中运行相同的代码,我会收到警报:"Foo - Else 函数运行。
我不知道为什么这是特定于浏览器的。如果在其他地方解决,我很高兴去阅读一些额外的线程或文档,但我似乎无法弄清楚。
编辑:根据请求,代码简化为仅显示相关部分。
function bar(){
var addGiftVal = document.forms["subscribe"]["addGift"].value;
if (addGiftVal == "yes"){
alert("Bar - Yes Function Ran.");
}
else {
alert("Bar - Else Function Ran.");
}
}
function foo(){
var subTypeVal = document.forms["subscribe"]["sub_type"].value;
var subShipVal = document.forms["subscribe"]["ship_address_check"].value;
if (subTypeVal == "renewal"){
alert("Foo - Renewal Function Ran.");
}
else if (subTypeVal == "new"){
alert("Foo - New Function Ran.");
}
else {
alert("Foo - Else Function Ran.");
}
}
<body onLoad="foo();">
<form name="subscribe" id="subForm">
<p><input type="radio" name="sub_type" value="new" id="subf_new" checked="checked" onclick="foo();"> <label for="subf_new">New</label>
<input type="radio" name="sub_type" value="renewal" id="subf_renewal" onclick="foo();"> <label for="subf_renewal">Renewal</label>
<input type="radio" name="sub_type" value="gift" id="subf_gift" onclick="foo();"> <label for="subf_gift">Gift</label> </p>
<p><input type="radio" name="ship_address_check" id="subf_same" value="same" checked="checked" onclick="foo();"><label for="subf_same">Same</label> </p>
<p><input type="radio" name="ship_address_check" id="subf_different" value="different" onclick="foo();"><label for="subf_different">Different</label> </p>
<p>Yes or No?</p>
<input type="radio" name="addGift" id="subf_yes" value="yes" onclick="bar();"><label for="subf_yes">Yes</label>
<input type="radio" name="addGift" id="subf_no" value="no" onclick="bar();"><label for="subf_no">No</label>
<div id="submitBox"><input type="submit" value="Submit">
</form>
</body>
document.forms["subscribe"]["sub_type"]
为您提供元素的集合,而不仅仅是选定的元素。似乎Chrome允许您在此集合上调用.value
并获取所选值,但某些浏览器没有(我没有Safari,但IE也失败了)。无论如何,调用.value
集合并不是正确的方法。
您可以通过调用以下内容来查看此操作:
document.forms["subscribe"]["sub_type"]
和
document.forms["subscribe"]["sub_type"].value
从浏览器开发工具控制台中。
您需要使用这些答案中的策略来正确获取检查值。如果你没有使用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;
}
}
问题是你没有将"this"传递给函数。尝试打印出subTypeVal的值以了解我的意思 - 您会注意到,在Safari中,这将返回HTML元素列表,而在Chrome中,它(正确或错误)推断您想要单击的元素。
要解决此问题,请像这样将"this"传递到您的函数中:
<input type="radio" name="sub_type" value="renewal" id="subf_renewal" onclick="foo(this);"><label for="subf_renewal">Renewal</label>
在你的JavaScript中,在你的"foo"函数中添加一个参数:
function foo(myButton)
和使用
var subTypeVal = myButton.value;
相反。
在这里看jsFiddle:http://jsfiddle.net/fprfk146/2/
- 使用fs.readdir在vps上返回ENOENT,但在localhost上不返回
- Angular http在Phone gap中返回错误,但在浏览器中成功
- Ajax调用在本地返回json,但在服务器上运行时返回xml
- 为什么 Math.log10 在某些系统上工作,但在其他系统上返回未定义
- 空数组在比较时返回 false,但在单独返回 true 时返回 true.为什么这样
- For 循环成功地将元素添加到数组中,但在之后返回空数组
- jQuery:单击Ajax返回数据,但在第一次调用时显示在警报中
- 日期差异在Firefox和IE中有效,但在Chrome中返回NaN
- 从 http 处理程序返回的 JSON 在 IE8 中为空,但在 IE10 或 Chrome 中不是
- jQuery AJAX 调用在 Firefox 中有效,但在 IE 中不起作用 - 返回有效响应
- IF 在 Chrome 中返回 true,但在 Safari 中返回 false
- Javascript在IE7,8,9中返回控制台错误,但在所有其他浏览器中都能完美运行
- JavaScript Fo.FolderExist() 在 PHP echo 中不起作用,但在 HTML 中返回 tru
- BluebirdJS抱怨承诺被创建,但在处理程序中没有返回
- 绑定事件在Chrome上失败,但在浏览器返回时在Firefox中正常
- Dojo.request for iteminfo-在Fiddler中返回代码200,但在浏览器中返回代码0
- 值已返回并推入数组,但在返回之外不可用
- php-json:encode在服务器上的angular控制器上的http调用中返回undefined,但在localh
- JavaScript对象数组在页面加载期间返回长度为零,但在控制台中不返回
- getElementById在代码中返回null,但在控制台中工作