未捕获的TypeError:页面加载后无法将属性'value'设置为null

时间:2019-05-27 07:30:04

标签: javascript

我知道这个问题已经问了很多遍了,但是我找不到我的场景的答案。下面是我的代码。我在findPattern函数的最后一行中收到此错误。但是我在ID内部创建的createMyAreatextArea += '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 个答案:

答案 0 :(得分:1)

错误表明document.getElementById("P"+app_page_id+"_VALUE"+key)null。倒退,想一想它可能为空的所有原因:

  • "P"+app_page_id+"_VALUE"+key的评价是什么? DOM中是否存在具有此ID的元素? (您可以使用浏览器开发工具手动检查DOM树,或尝试在开发控制台中运行getElementById()。)
  • 具有该id的元素可能不存在。您指出您正在尝试创建它,但是是否有任何原因createMyArea()可能无法正常工作?
    • 如果lang是一个空对象,则此循环将执行0次:for (var key in lang) ...
    • for循环在lang对象的键上进行迭代,但是在循环内您可以通过languages[key]访问。有点奇怪。

他们还有许多要检查的东西,但这应该使您对要寻找的东西有所了解。后退并测试所有假设!

答案 1 :(得分:0)

您检查了生成的HTML还是无法提供这样的示例?

我还注意到您对变量使用var的方式比应该多使用。快速了解何时使用herehere

答案 2 :(得分:0)

生成代码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之前,然后查看在那里检查了哪些值。