Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript parseInt在应该是数字时返回NaN?_Javascript_Jquery_Nan_Custom Data Attribute_Parseint - Fatal编程技术网

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-
属性都无法通过jQuery
data
方法获得,因为它们在实际检索之前已计算。这包括
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中得到了修复