未捕获的类型错误:页面加载后无法将属性“value”设置为 null
2019-05-27
120
我知道这个问题已经被问过很多次了,但我找不到适合我的场景的答案。下面是我的代码。我在
findPattern
函数的最后一行中收到此错误。但我已在
createMyArea
中创建了
ID
,即
textArea += 'id="P'+app_page_id+'_VALUE'+key+'"
。但为什么找不到
ID
?请告诉我我在这里做错了什么。我在页面加载后加载它
var app_page_id = 40;
var app_pattern_page_id = 32;
var app_id;
var checksum;
var lang;
$(document).ready(function() {
app_id = $("#pFlowId").val();
checksum = $("#pInstance").val();
createMyFlow();
function createMyFlow(){
var result = new htmldb_Get(null, $v('pFlowId'), 'APPLICATION_PROCESS='+getAllLanguagesProc, $v('pFlowStepId'));
lang = jQuery.parseJSON(result.get()).lang;
createMyArea();
result = loadDataFromMyOra();
if(result !== null)
findPattern(result);
}
function createMyArea(){
var textArea;
for ( var key in lang){
textArea = '<tr><td align="right"><label for="P'+app_page_id+'_VALUE_'+key+'">';
textArea += '<span class="optional">Name '+languages[key][0]+': </span></label></td>';
textArea += '<td align="left" valign="middle">';
textArea += '<input type="hidden" name="p_arg_names" />';
textArea += '<fieldset id="P'+app_page_id+'_VALUE_fieldset_'+key+'" class="textarea" tabindex="-1">';
textArea += '<input name="p_t04" type="text" maxlength="50" size="32" value=""';
textArea += 'id="P'+app_page_id+'_VALUE'+key+'" required="" class="text_field"></fieldset>'
textArea += '</td></tr>';
$('.formlayout').append(textArea);
}
}
function findPattern(patterns)
{
var item = "";
for ( var key in patterns){
item = patterns[key]+"";
item = item.replace(/,/g,",");
item = item.replace(/“/g,'"')
document.getElementById("P"+app_page_id+"_VALUE"+key).value = item; //error here
}
}
});
3个回答
错误表明
document.getElementById("P"+app_page_id+"_VALUE"+key)
为
null
。反向思考并思考它为 null 的所有原因:
-
"P"+app_page_id+"_VALUE"+key
的计算结果是什么?DOM 中是否存在具有此 id 的元素?(您可以使用浏览器开发工具手动检查 DOM 树,或尝试在开发控制台中运行getElementById()
。) -
具有该 id 的元素可能不存在。您指出您正在尝试创建它,但是否有任何原因导致
createMyArea()
可能无法正常工作?-
如果
lang
是一个空对象,则此循环将执行 0 次:for (var key in lang) ...
-
for
循环迭代lang
对象的键,但在循环内部,您通过languages[key]
进行访问。这有点奇怪。
-
如果
还有 很多 东西需要检查,但这应该可以让您了解要查找的内容。反向工作并测试您的所有假设!
Leftium
2019-05-27
生成代码
createMyArea()
的函数使用 lang 变量中的键
for ( var key in lang){
....
textArea += 'id="P'+app_page_id+'_VALUE'+key+'" required="" class="text_field"></fieldset>'
....
但在 findPatterns 中,您正在使用另一个变量中的键检查文档的 id
for ( var key in patterns){
....
document.getElementById("P"+app_page_id+"_VALUE"+key).value = item;
....
如果 patterns 变量和 lang 变量没有相同的键,那么您将收到错误。
要检查这一点,您可以
console.log ("P'+app_page_id+'_VALUE'+key+'")
就在 document.getElementById 之前,看看那里检查了哪些值。
Cosmin Staicu
2019-05-27