无法读取null的属性“value”

时间:2015-08-18 11:13:03

标签: javascript jquery vb.net

我知道有关于这个主题的解决方案,但我已经在测试页面上测试了它并且正常工作。基本上它是收据页面上的反馈表单,如果用户再次登录并付款,则它不会再次看到该表单。 我通过在DOM中放置一个隐藏字段,并在后面的VB代码中将值从“Y”切换到“N”来实现这一点,这一切都在测试页面上正常工作。但是当我在应用程序中对其进行编码时,它会给我一个错误“ TypeError:无法读取属性'值'null ”。我虽然起初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);
    });

3 个答案:

答案 0 :(得分:1)

您不能以这种方式使用id,ASP.NET在将对象ID呈现给客户端时会更改它们。你应该使用这样的东西:

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

答案 1 :(得分:1)

替换

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

通过

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

修改

此解决方案适用于任何容器中的所有控件。有时人们会对$(['id$=xyz'])$(['id*=xyz'])感到困惑。第一个不适用于您的控件容器,如GridView Repeater等。

使事情更加清晰have a look of selectors here.

感谢。

答案 2 :(得分:1)

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

尝试以下解决方案:

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