开发者问题收集

未捕获的类型错误:页面加载后无法将属性“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(/&#44;/g,",");
            item = item.replace(/&#8220;/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

您是否检查过生成的 HTML,或者无法提供此类示例?

此外,我注意到您对变量使用 var 的频率远远超过了应有的频率。请快速阅读 此处 此处 ,了解何时使用什么。

Ruben Szekér
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