IE错误'var'未定义

时间:2013-06-10 13:52:29

标签: javascript html internet-explorer autocomplete

我的应用程序中有一个自动完成输入字段。当打开此自动填充输入字段的jsp时,我会在行'names' is undefined中收到错误<body onload="getNames(names)">。这只发生在IE8,7,9中。在Chrome和Firefox中一切都很好。在控制器中,我获取用户的姓名和姓氏,并将它们写在一个用$分隔的字符串中,然后将该字符串allUsersRoleUserAC发送给jsp。方法getNames(names)拆分该字符串并将它们放入var tags

这是jsp代码:

<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Admin page</title>

<link rel="stylesheet" type="text/css" href="<%=response.encodeURL(request.getContextPath() + "/css/jquery-ui.css") %>" />
<link rel="Stylesheet" type="text/css" href="<%=response.encodeURL(request.getContextPath() + "/css/DOMAlert.css") %>" media="screen" />
<script type="text/javascript" src="<%=response.encodeURL(request.getContextPath() + "/JavaScript/DOMAlert.js") %>"></script>
<script type="text/javascript" src="<%=response.encodeURL(request.getContextPath() + "/JavaScript/jquery-1.8.2.js") %>"></script>
<script type="text/javascript" src="<%=response.encodeURL(request.getContextPath() + "/JavaScript/jquery-ui.js") %>"></script>
<script type="text/javascript">

var tags = new Array();
function getNames(names){
    tags = names.value.split('$');
}

</script>

</head>
<body onload="getNames(names)" >

    <form action="<%=response.encodeURL(request.getContextPath() + "/admin/deleteUser.html") %>" method="post">
        <input id="names" type="hidden" value="${ requestScope['allUsersRoleUserAC'] }" />
        <input name="korisnik" class="userSelectDeleteUser" value="ime prezime" onclick="this.value=''" id="autocomplete" />
        <input class="izbrisiKorisnikaButtonPosition" id="buttonRightPart" type="button" value="Izbriši" />
    </form>

    <script type="text/javascript">
        $( "#autocomplete" ).autocomplete({
            source: function( request, response ) {
                var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
                response( $.grep( tags, function( item ){
                    return matcher.test( item );
                }) );
            }
        });
    </script>

</body>
</html>

3 个答案:

答案 0 :(得分:4)

onload="getNames(names)"

世界是什么names?您需要使用getElementById来引用元素。您不应该直接通过id引用元素。

onload="getNames(document.getElementById('names'));"

答案 1 :(得分:1)

names实际上是未定义的。其他浏览器只会传递未定义的值,而IE不会让你这样做。

如果您想获得names元素,则可以使用

document.getElementById('names')

我建议将其放在onLoad函数中,而不是将其作为参数传递,以将逻辑与标记分开。

答案 2 :(得分:1)

onload="getNames($("#names").val())"

或非jQuery

onload="getNames(document.getElementById('names').value)"