JavaScript变量外部函数不保留值
JavaScript variable out side function not retaining the value
我对下面的代码有一个问题,我使用onclick属性来调用下面的函数,然后检查哪种类型的数据-attr被传递。然后将其赋值给函数外部的局部变量。但它保存了一个attr,显示为警报,另一个显示为未定义,然后当我点击另一个attr时,它显示它,第一个显示为未定义。
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
总是字符串 'undefined'
(因为typeof总是返回一个字符串)。该语句将为真,除非数据属性恰好是相同的-即字符串'undefined'
。
所以您的问题不是保留,而是由于错误配置的if
语句而覆盖值的事实。
typeof $(sportAttr).attr("data-main-sport-id") !== 'undefined'
或者只是使用不带typeof
的未定义的简单比较(但这不够健壮,所以您使用typeof的直觉本身并不坏):
$(sportAttr).attr("data-main-sport-id") !== undefined
您可以只检查true值,而不是检查属性是否未定义且value是否为false,如下所示-
var attr1 = null;
var attr2 = null;
function createLink(sportAttr) {
if($(sportAttr).attr("data-provider-sport-id")) {
attr2 = $(sportAttr).attr("data-provider-sport-id");
//alert(attr2);
}
if($(sportAttr).attr("data-main-sport-id")) {
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")) {
}
}
}
希望这对你有帮助!
首先我建议你避免在你的html上设置onclick
,这不是一个好的做法。我也改进了你的代码,看看下面:
JS:
$(document).ready(function(){
$('.myAction').on('click', function(){
createLink($(this).data('id'))
});
});
function createLink(sportAttr) {
if(typeof sportAttr !== 'undefined') {
alert(sportAttr);
}
}
HTML: <i class="myAction" data-id="9" data-provider-sport-id="9">Music</i>
<b class="myAction" data-id="17" data-main-sport-id="17">Music</b>
基本上,这个想法是做一个泛型函数,并尝试减少代码,使其更干净,而且你没有正确检查undefined
。
if(typeof sportAttr !== 'undefined') {
alert(sportAttr);
}
演示我希望这对你有帮助。 删除typeof
操作符,typeof undefined
为"undefined"
相关文章:
- 将参数传递给函数,同时保留事件处理程序
- 自调用函数不保留私有值
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- 我可以通过使用函数绑定来保留默认值吗?如果没有,为什么
- JavaScript 在内部函数中保留一个 var
- GAS:在处理程序函数中使用变量时,如何更改全局变量值并保留其更改后的值
- DynamoDB中的扫描函数,保留关键字为FilterExpression NodeJS
- hidden()是javascript的保留函数吗
- 当使用“”创建时保留函数属性;绑定”;
- 命名函数“;删除“..删除是一个保留字
- 为什么参数不在函数之外保留其值
- Javascript 变量函数不保留值
- JavaScript 作用域:在函数后保留全局变量值
- JavaScript 不会保留新的标签内容来执行函数
- 为什么 javascript 会保留在外部函数中发生的局部变量重新分配,而不必捕获返回值
- 闭包编译器 - 保留未使用的函数,不要重命名未定义的函数
- 保留参数的函数
- 是否可以在JS中获取保留字(变量,函数,对象名称)的列表
- 如何在 JavaScript 中覆盖全局函数,但保留对原始函数的引用
- 保留函数中的变量