addEventListener在外部Javascript文件中不起作用,但在直接放在ASP页面上时起作用。为什么?

时间:2018-02-28 14:49:17

标签: javascript html asp.net

当我试着解释这个时,请耐心等待。我有这个包含多个功能的javascript文件。没什么好看的,只有少数改变了文本框颜色,还有一个我要运行正则表达式检查。

问题:我有一个文本框,我只想检查数字和字母。这是我用来做的简单函数 -

/ *这位于外部JS文件* /

function checkTextBox() 
{
    var userInfo = document.document.getElementById('TextBox1');
    var pattern = new RegExp(/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/); 
    //unacceptable chars
    if (pattern.test(userInfo)) {
        alert("Please only use standard alphanumerics");
        return false;`enter code here`
    }
    return true; //good user input
}

var elLicenseHolder = document.getElementById('TextBox1');
elLicenseHolder.addEventListener('blur', checkTextBox, false);

相当简单易行。但是,我在运行页面时和页面加载后出现此错误。

&#34;未捕获的TypeError:无法读取属性&#39; addEventListener&#39;为null     在VM109 index.js:48&#34;

我意识到这可能是由于TextBox为空而发生的,然而,在输入错误数据并点击开箱后,它是否仍然会激活?执行addEventListener的blur部分?

此外,当直接放在ASP页面上时,减去addEventListener的功能相同。像这样。

<p class="form_labels">Product Supported -- 
                            <asp:TextBox ID="TextBox1" class="ddl_text_small"  runat="server" onblur="checkTextBox();" ></asp:TextBox>
                        </p>
                         <script>
                             function checkTextBox() {
                                 var userInfo = document.document.getElementById('TextBox1');
                                 var pattern = new RegExp(/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/); //unacceptable chars
                                 if (pattern.test(userInfo)) {
                                     alert("Please only use standard alphanumerics");
                                     return false;
                                 }
                                 return true; //good user input
                             }
                            </script>

当我刷新页面并再试一次时,这很好用。

大家都知道,我试过在整个页面上放置标签。从头部到相关文本框之前和之后,以及页面底部。我愚弄了身体和窗口的onload事件。似乎没什么用。我可能不得不求助于在ASP页面上保留JS,但如果我可以在外部文件中使用它,我会更喜欢它。任何帮助都是极好的。谢谢。

1 个答案:

答案 0 :(得分:0)

它无法正常工作,因为默认情况下ASP.Net会更改服务器控件的ID。您可以将ClientIDMode属性设置为static来停用它。

https://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v=vs.110).aspx

另外,请务必在html文档的末尾加载javascript文件。