簡體   English   中英

將案例切換為字符串

[英]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調用中的thisString對象實例,而不是字符串原語。 JavaScript都有。 switch語句中,與case的比較是通過=== ,而字符串實例不是===到字符串原語

解決它的三種方法:

  1. 如果您將開關更改為:

     switch (String(this)) { 

    ...它將把它變成原語,然后你的switch工作。

  2. 正如VisioN在下面的注釋中指出的那樣,使用$.each傳遞的參數(每個字符串 - 作為基元 - 將作為第二個參數提供):

     $.each(typ, function(index, value) { switch (value) { // ... } }); 
  3. 使用任何的這個對方的回答中討論的備選方案 (其中之一是一個不錯的簡單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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM