Javascript parseInt在应该是数字时返回NaN?
我有以下代码:Javascript parseInt在应该是数字时返回NaN?,javascript,jquery,nan,custom-data-attribute,parseint,Javascript,Jquery,Nan,Custom Data Attribute,Parseint,我有以下代码: $(函数(){ var$form=$(“#pollAnswers”), $radioOptions=$form.find(“输入[type='radio']”), $existingDataWrapper=$(“.web应用项目数据”), $webAppItemName=$existingDataWrapper.data(“项目名称”), $formButton=$form.find(“按钮”); $radioOptions.on(“更改”,函数(){ $formButton.
$(函数(){
var$form=$(“#pollAnswers”),
$radioOptions=$form.find(“输入[type='radio']”),
$existingDataWrapper=$(“.web应用项目数据”),
$webAppItemName=$existingDataWrapper.data(“项目名称”),
$formButton=$form.find(“按钮”);
$radioOptions.on(“更改”,函数(){
$formButton.removeAttr(“禁用”);
var chosenField=$(此).data(“字段”),
answer_1=parseInt($existingDataWrapper.data(“answer-1”),
answer_2=parseInt($existingDataWrapper.data(“answer-2”)),
answer_3=parseInt($existingDataWrapper.data(“answer-3”));
console.log(“1=“+answer_1”);
console.log(“2=“+answer_2”);
console.log(“3=“+answer_3”);
//与问题无关的附加代码
});
});代码>
答案1
答案2
答案3
提交
您可以使用函数读取属性。然而,正如其他人所建议的,jQuery不会读取包含数字的属性名称
有关解决方案,请参见代码
$(function() {
var $form = $("#pollAnswers"),
$radioOptions = $form.find("input[type='radio']"),
$existingDataWrapper = $(".web-app-item-data"),
$webAppItemName = $existingDataWrapper.data("item-name"),
$formButton = $form.find("button");
$radioOptions.on("change",function(){
$formButton.removeAttr("disabled");
var chosenField = $(this).data("field"),
answer_1 = parseInt($existingDataWrapper.attr("data-answer-1")),
answer_2 = parseInt($existingDataWrapper.attr("data-answer-2")),
answer_3 = parseInt($existingDataWrapper.attr("data-answer-3"));
console.log("1 =" + answer_1);
console.log("2 =" + answer_2);
console.log("3 =" + answer_3);
//Additional code not related to question
});
});
jquery中的数据函数似乎没有考虑属性名称中有数字的属性。“1号”不起作用,但“1号”起作用。这可能会帮助您快速解决问题
$(函数(){
var$form=$(“#pollAnswers”),
$radioOptions=$form.find(“输入[type='radio']”),
$existingDataWrapper=$(“.web应用项目数据”),
$webAppItemName=$existingDataWrapper.data(“项目名称”),
$formButton=$form.find(“按钮”);
$radioOptions.on(“更改”,函数(){
$formButton.removeAttr(“禁用”);
var chosenField=$(此).data(“字段”),
answer_1=parseInt($existingDataWrapper.data(“answer one”),
answer_2=parseInt($existingDataWrapper.data(“answer two”),
答案3=parseInt($existingDataWrapper.data(“答案三”);
console.log(“1=“+answer_1”);
console.log(“2=“+answer_2”);
console.log(“3=“+answer_3”);
//与问题无关的附加代码
});
});代码>
答案1
答案2
答案3
提交
jQuery 2.1.3似乎无法识别数据-包含仅由数字组成的名称段的属性。例如,这些工作:
数据应答
为.data()[“应答”]
data foo
as.data()[“foo”]
data fooBar
as.data()[“fooBar”]
这些不包括:
- 数据-答案-1
- data-foo-bar-3
jQuery 3的表现似乎更符合预期。jQuery在高于1的版本中只允许数据属性中有一个“-”
。您的代码适用于所有JQuery 1.x版本。在JQuery 3.0.0之前,JQuery尝试检索数据-
属性的其余部分。换言之:
data-answer-1
被骆驼化为data-answer1
,并尝试检索所述属性(因为它无法将其规范化回data-answer-1
),当然没有,因此它返回未定义的属性。任何包含多个破折号且未正确计算的data-
属性都无法通过jQuerydata
方法获得,因为它们在实际检索之前已计算。这包括data-
属性,这些属性在第二个破折号后不以字母开头
基本上,jQuery可以:
var key = jQuery.camelCase(key);
//... some time later
var attrName = "data-" + key.replace(/[A-Z]/g, "-$1" ).toLowerCase();
// back to normal or is it...?
elem.getAttribute(attrName); //might not exist.
根据此,已在3.0.0版上修复了此问题。下面是解决这个问题的方法。现有的DataWrapper.data(“答案-1”)在没有parseInt@CharlieH-未定义的
就是它给我的。jQuery拉取数据属性是否有错误?是否有错误?在我的测试中,它完全忽略了这一点。奇怪的是,它确实允许数据1-答案,然而。啊哈!这取决于您使用的jQuery版本。关于jQuery的版本,这是一个很好的发现!当您指出哪些有效,哪些无效时,我刚刚意识到另一种解决方法是使用data-answer1
。换句话说,只要删除-
,它就可以工作了。谢谢你的帮助。谢谢你的信息!它似乎适用于1.xx分支,而不是2.xx分支。很高兴看到它在jQuery3.0中得到了修复