函数外的 JavaScript 变量不保留值

标签 javascript jquery html

下面的代码有问题,我使用 onclick 属性调用下面的函数,然后检查传递了哪种类型的数据属性。然后将其分配给函数外部的局部变量。但是一些它如何保存 1 attr 并在警报中显示它并将另一个显示为未定义,然后当我单击另一个 attr 时它显示它并且第一个显示未定义。下面是我的 js 和 HTML。

jQuery 代码:

<script>
var attr1 = null;
var attr2 = null;


function createLink(sportAttr) {

    if($(sportAttr).attr("data-provider-sport-id") != typeof undefined && $(sportAttr).attr("data-provider-sport-id") !== false) {

        attr2 = $(sportAttr).attr("data-provider-sport-id");

        //alert(attr2);
    }

    if($(sportAttr).attr("data-main-sport-id") != typeof undefined && $(sportAttr).attr("data-main-sport-id") !== false) {
        attr1 = $(sportAttr).attr("data-main-sport-id");
        //alert(attr1);
    }

    alert(attr1 + " and second attr is " + attr2);
    //it never reaches the next line because for some reason one of the attrs is always null
    if(attr1 != null && attr2 != null) {

        if(confirm("Are you sure you want to create this link")) {

        }

    }

}
</script>

HTML代码:

<i data-provider-sport-id="9" onclick="createLink(this)">Music</i>

<b data-main-sport-id="17" onclick="createLink(this)">Music</b>

当我点击第一个时,它显示“undefined and second attr is 9”。

当我点击第二个时,它显示“17 and second attr is undefined”

有什么线索吗?

最佳答案

此检查不正确:

$(sportAttr).attr("data-main-sport-id") != typeof undefined

看,typeof undefined 始终是 string 'undefined'(因为 typeof 始终返回字符串)。除非数据属性恰好相同 - 即字符串 'undefined',否则此语句为真。

因此,您的问题不在于保留,而是由于配置错误的 if 语句而覆盖了值这一事实。

要解决此问题,请使用此未定义检查(您可能首先尝试过):

typeof $(sportAttr).attr("data-main-sport-id") !== 'undefined'

或者只是使用与 undefined 的简单比较,没有 typeof (但这不太健壮,所以你使用 typeof 的直觉本身并不坏。):

$(sportAttr).attr("data-main-sport-id") !== undefined

关于函数外的 JavaScript 变量不保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946213/

相关文章:

html - 如何解决固定的表头边框对齐问题

java - 无法在 IE 10 中正确打开/显示我​​的 Web 应用程序

javascript - jQuery 在 Iframe 之外更改 div 的 CSS

javascript - 如何使用 JQuery 验证 Ckeditor

javascript - 重新创建 Fabric.js Canvas 并导出为图像?

html - 将文本与列表中下方的同一行对齐

javascript - 如何将一种方法连接到不同的对象?

javascript - 如何在不捕获 keydown 事件的情况下查看修改键是否被按住?

javascript - iOS 的 NativeScript livesync 在启动时失败

jquery - 使用 CSS 动画 <image> svgs?