$(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);
}
Run Code Online (Sandbox Code Playgroud)
我在控制台中有这个代码它返回2xdefaults.为什么?
我尝试将每种类型的输入作为文本或密码返回,但我的开关无法识别"typ"
T.J*_*der 23
你看到这种行为的原因是this
在each
调用中是一个String
对象实例,而不是一个字符串原语.JavaScript都有.在一个switch
语句中,与案例的比较是通过===
,而字符串实例不是===
字符串基元.
解决它的三种方法:
如果您将开关更改为:
switch (String(this)) {
Run Code Online (Sandbox Code Playgroud)
......这将把它变成原始的,然后你的switch
作品.
正如VisioN在下面的注释中指出的那样,使用$.each
传递的参数(每个字符串 - 作为基元 - 将作为第二个参数提供):
$.each(typ, function(index, value) {
switch (value) {
// ...
}
});
Run Code Online (Sandbox Code Playgroud)使用在另一个答案中讨论的任何替代方案(其中一个是一个很好的简单for
循环).
旁注:你没有宣布你的变量,你就成了隐形全球恐怖的牺牲品typ
.
jQuery在这里有点矫枉过正,对于使用jQuery做正确的方法,无论如何都要看看TJ Crowders的答案.
我建议使用标准的for
-loop 方法更简单.它工作正常:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您$.each
错误地使用了该功能。它应该是这样的:
$.each( typ, function( key, value ) {
switch(value){
case "text":
console.log('text');break;
default:
console.log('default');break;
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37431 次 |
最近记录: |