这是我的代码
<script>
function validation () {
var x=document.getElementById("user").value;
var y=document.getElementById("user");
var names="<%=names%>";
for (var j=0; j<names.length; j++) {
if (names[j].test(x)) {
//alert(names[j].match(x));
return true;
}
else{
y.focus();
return false;
}
}
}
</script>
这是一个登录页面,有2个字段与通常的用户名密码一样。 我正在检查数据库中是否有用户名,他可以输入密码,否则他不能。但即使用户名是对的,这段代码也不会输入密码。 我做错了什么?
答案 0 :(得分:0)
假设java中names
的数据类型为String[]
,则代码<%=names%>
等于<%=names.toString()%>
。
因此,当呈现jsp时,您的javascript代码将类似于var names="[Ljava.lang.String;@5d888759"
。显然,它不是一个有效的javascript数组定义。
首先需要处理java数组。将以下代码添加到您的jsp(在您的javascript代码上方):
<%
StringBuilder sb = new StringBuilder();
sb.append("[");
for(String name : names) {
sb.append("'");
sb.append(name);
sb.append("',");
}
if(sb.charAt(sb.length() - 1) == ',') {
sb.setLength(sb.length() - 1); //remove tailing ','
}
sb.append("]");
String strNames = sb.toString();
%>
然后将您的js代码修改为:
var names="<%=strNames%>";
jsp渲染后,你的js代码将是:
var names="['foo','bar']";
是js中的有效数组定义。然后它会工作。
如果java中names
的数据类型为List<String>
,则解决方案类似。
答案 1 :(得分:0)
我找到了答案.Thnx的帮助
这是答案
function validation() {
var x=document.getElementById("user").value;
var y=document.getElementById("user");
var z=document.getElementById("pass");
var names="<%=names%>";
names= names.replace("[", "").replace("]", "");
names=names.split(", ");
for (var j=0; j<names.length; j++) {
if (names[j].localeCompare(x)==0) {
return true;
}
z.removeAttribute("readonly", 0);
}
alert("You username is not registered on our databsae");
y.focus();
}
答案 2 :(得分:0)
检查出来
案例1
var names='{id:1,key:"Apple"}'; // here names is string
names.key // will give you error
// so you need to parse it
//using the json2.js script:
var obj = JSON.parse(names);
obj.key // will give you Apple
var obj = jQuery.parseJSON(names)// in jquery
较新的浏览器本身支持JSON对象。 Crockford的JSON库的当前版本将仅定义JSON.stringify和JSON.parse(如果它们尚未定义),则保留任何浏览器本机实现。
案例2
var names={id:1,key:"Apple"}; // here names is object
names.key // will give you Apple
参考
JSON =&gt; https://github.com/douglascrockford/JSON-js