$(document).ready(function(){
createForm("text,password",".content");
});
function createForm(types,object){
typ = types.split(',');
//var source = "";
$.each(typ,function(){
switch(this){
case "text":
console.log('text');break;
default: console.log('default');break;
}
});
//$(object).html(source);
}
我在控制台中有这个代码它返回2xdefaults。为什么呢?
我尝试将每种类型的输入作为文本或密码返回,但我的开关无法识别“typ”
答案 0 :(得分:20)
您看到此行为的原因是this
调用中的each
是String
对象实例,而不是字符串原语。 JavaScript都有。在switch
语句中,与案例的比较是通过===
,字符串实例不是===
到字符串原语
解决问题的三种方法:
如果您将开关更改为:
switch (String(this)) {
...会将其变回原语,然后switch
就可以了。
正如VisioN在下面的评论中指出的那样,使用$.each
传递的参数(每个字符串 - 作为基元 - 将作为第二个参数提供):
$.each(typ, function(index, value) {
switch (value) {
// ...
}
});
使用the alternatives discussed in this other answer中的任何一个(其中一个是简单的for
循环)。
旁注:你没有宣布typ
变量,就会成为The Horror of Implicit Globals的牺牲品。
答案 1 :(得分:6)
jQuery在这里有点过分,因为使用jQuery正确的方法无论如何都要看看T.J.克劳斯回答。
我推荐使用标准for
循环更简单的方法。它工作正常:
var types = "text,password".split(",");
for (var i = 0; i < types.length; i++) {
switch(types[i]){
case "text":
console.log('text');
break;
default:
console.log('default');
break;
}
}
答案 2 :(得分:4)
您错误地使用了$.each
功能。它应该是这样的:
$.each( typ, function( key, value ) {
switch(value){
case "text":
console.log('text');break;
default:
console.log('default');break;
}
});
答案 3 :(得分:0)
尝试使用switch(String(this))
代替switch(this)
。当然,初始化变量。