[英]Switch case as string
$(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”
您看到此行為的原因是each
調用中的this
是String
對象實例,而不是字符串原語。 JavaScript都有。 在switch
語句中,與case的比較是通過===
,而字符串實例不是===
到字符串原語 。
解決它的三種方法:
如果您將開關更改為:
switch (String(this)) {
...它將把它變成原語,然后你的switch
工作。
正如VisioN在下面的注釋中指出的那樣,使用$.each
傳遞的參數(每個字符串 - 作為基元 - 將作為第二個參數提供):
$.each(typ, function(index, value) { switch (value) { // ... } });
使用任何的這個對方的回答中討論的備選方案 (其中之一是一個不錯的簡單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;
}
}
你錯誤地使用$.each
函數。 它應該如下所示:
$.each( typ, function( key, value ) {
switch(value){
case "text":
console.log('text');break;
default:
console.log('default');break;
}
});
嘗試使用switch(String(this))
而不是switch(this)
。 當然,初始化變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.