我试图获取某些元素的数据属性,但是在创建对象时,元素尚未加载(我理解)。我的问题是什么是最好的(或任何)解决方案,因为我需要在两个不相互交互的独立函数中使用这个对象?
function Data_Num_Array(){
this.data_num_array=$("*[data-num]");
}
Data_Num_Array.prototype.get_data_num_array_element=function(string_val){
var data_num_of_element;
for(var i=0;i<this.data_num_array.length;i++){
if(this.data_num_array[i].id===string_val){
data_num_of_element=$(this.data_num_array[i]).attr("data-num");
break;
}
}
return data_num_of_element;
};
function call_me(){
console.log(obj.get_data_num_array_element("div"));
}
如果此处出现语法错误,则不是问题,这只是针对问题的情况。
var obj=new Data_Num_Array();
$(document).ready(function(){
console.log(obj.get_data_num_array_element("div"));
});
$("#click").click(function(){
console.log(obj.get_data_num_array_element("click"));
});
<html>
<head>
</head>
<body>
<div id="div" data-num="1"></div>
<button id="click" data-num="2"></button>
</body>
</html>
答案 0 :(得分:0)
如果您是JavaScript的新手,可能值得阅读范围界定:MDN: Variable Scoping
简而言之,两个函数需要obj
,但我们可以利用范围确保来确保$(document).ready
和$("#click")
都可以访问obj
。另一方面,obj
需要等到文档准备好。我们可以暂停使用您正在使用的Data_Num_Array
回调函数来实例化$(document).ready
。
稍微重新排列:
function Data_Num_Array(){
this.data_num_array=$("*[data-num]");
}
Data_Num_Array.prototype.get_data_num_array_element=function(string_val){
var data_num_of_element;
for(var i=0;i<this.data_num_array.length;i++){
if(this.data_num_array[i].id===string_val){
data_num_of_element=$(this.data_num_array[i]).attr("data-num");
break;
}
}
return data_num_of_element;
};
$(document).ready(function(){
var obj=new Data_Num_Array();
console.log(obj.get_data_num_array_element("div"));
$("#click").click(function(){
console.log(obj.get_data_num_array_element("click"));
});
});
现在,我们正在等待设置新的Data_Num_Array
和点击事件。
此外,您的点击处理程序中有一个小错误,您在其中调用了obj.get_data_num_array_element("button")
而不是obj.get_data_num_array_element("click")
。 (您为<button>
提供了ID为#34;点击&#34;。)
在更加自以为是的方面,考虑将camelCase用于变量名称。输入的字符越少。 ;)