无法读取property 'value'零

Cannot read property 'value' of null

本文关键字:value 读取 property      更新时间:2023-09-26

我知道在这个问题上有解决方案,但我在测试页面上进行了测试,并正确工作。基本上,它是收据页面上的一个反馈表单,如果用户再次登录并付款,它不会第二次看到表单。我通过在DOM中放置一个隐藏字段,并在VB代码中将值从"Y"切换为"N"来实现这一点,这在测试页面上运行良好。但是当我在应用程序中编写它时,它给了我一个错误"TypeError:无法读取null的属性'value'"。我虽然起初,javascript试图读取dom,当它还没有实际渲染,所以我切换到页面底部的javascript,甚至把一个计时器,以确保一切都加载,仍然是相同的结果。我不明白为什么它在一个应用程序中这样做,而不是在另一个应用程序中。

<asp:HiddenField ID="hidfeedback" Value="N" runat ="server" />
Javascript:

//Modal window appears and fades in after 5 secsonds
    $(document).ready(function () {
        setTimeout(function () {
            var getSessionValue = $('#hidfeedback').val();
            if (document.getElementById('hidfeedback').value === "N") {
                $('#myModal').modal('show');
            }
        }, 5000);
    });

Replace

var getSessionValue = $('#hidfeedback').val();

var getSessionValue = $('[id*=hidfeedback]').val();

编辑

此解决方案适用于任何容器中的所有控件。有时人们会混淆$(['id$=xyz'])$(['id*=xyz'])。第一个将不工作在你的控制的容器像GridView Repeater

为了让事情更清楚,看一下这里的选择器

谢谢。

你不能这样使用id, ASP。NET在将对象呈现给客户端时更改对象id。你应该这样写:

document.getElementById('<%=hidfeedback.ClientID%>')

asp.net中控件的客户端id与服务器端id不同。在ID之前附加一些额外的字符。最好的解决方案是将class设置为控件,并在jquery中使用类选择器访问它们。

尝试以下解决方案:

$(document).ready(function () {
    setTimeout(function () {
        var getSessionValue = $("[id$='hidfeedback']").val();
        if ($("[id$='hidfeedback']").val() === "N") {
            $("[id$='myModal']").modal("show");
        }
    }, 5000);
});