2012-05-21 61 views
1

我不能得到這個工作。我試圖在按下某個鍵時替換某些字符。當我使用變量replace_list而不是replace_list [「russian」]時它工作正常,但我需要不同的「替換列表」用於其他事情。我究竟做錯了什麼?的JavaScript和jQuery陣列中的每個

<script type="text/javascript" src="javascript/jquery.js"></script> 
<input id=answer> 
<script> 
replace_list = ["russian": {'a' : 'b', 'c' : 'd'}]; 

$(document).ready(function() { 
    $("#answer").keydown(function() { 
      var text = $(this).val(); 
      $.each(replace_list["russian"], function (index, value) { 
       if (index == text.substring(text.length - value.length)) { 
        $("#answer").val(text.substring(0, text.length - value.length) + value); 
       } 
      }); 
    }); 
}) 
</script> 
+0

如果您正在編寫'replace_list [0] = ...',而沒有首先定義'replace_list',一個錯誤。你可以通過首先創建一個數組 - var replace_list = []' - 或者通過賦值給一個數組賦值來解決這個問題:'var replace_list = [{...}]'。除此之外,根據您的對象是放置在'replace_list'還是'replace_list [0]',您的代碼似乎沒有產生任何有意義的結果差異。 –

+0

您當前的代碼除了行 [「russian」:{'a':'b','c':'d'}]​​ 應該是 {「russian」:{'a':' b','c':'d'}} – Jan

回答

1

你必須創建數組第一個(或調整分配)

var replace_list = [ 
    {'a' : 'а', 'A' : 'А', 'b' : 'б'}, // replace_list[0] 
    {'B' : 'Б', 'v' : 'в', 'V' : 'В'}  // replace_list[1] 
] 

編輯
要從評論滿足您的要求(replace_list["russian"]

var replace_list = { 
    "russian": {'a' : 'а', 'A' : 'А', 'b' : 'б'}, 
    "english": {'a' : 'а', 'A' : 'A', 'b' : 'B'} 
} 
+0

這就是我需要的東西!但是,我將如何去做第一個條目replace_list [「russian」]? – Stuffe

+0

化妝replace_list作爲對象...,然後嘗試定義各自如replace_list [ 「俄語」] = {<您的定義>},replace_list [ 「德語」] = {<另一個列表>},等等 –

+0

@Stuffle:我已經編輯我的答案 – Andreas

1

第一,你應該正確定義replace_list;我會假設你將有多個替換名單,你想在某些情況下適用:

var replace_list = { 
    'russian': {a: 'b', b: 'c', c: 'd'} 
}; 

然後:

var text = $(this).val(); 
for (var search in replace_list['russian']) { 
    text = text.replace(search, replace_list['russian'][search]); 
} 

$('#answer').val(text); 

在行動:http://jsfiddle.net/k8Dhg/

+0

是的。它在本例中將英文字母音譯爲俄羅斯西里爾文符號 – Stuffe

+0

@我看到的結果;我的答案也適合你嗎? :) –

+0

我不能得到它的工作。我真的很喜歡Javascript,所以我確信這就是爲什麼。 無論如何,該函數需要能夠處理長度超過1個字符的替換。如果有一個解決方案並不意味着我將不得不改變太多,我也會很喜歡。它只是似乎很奇怪,我認爲一切與replace_list工作,但不能與replace_list [0] ... – Stuffe

0
var replace_list = new Object(); 
replace_list["russian"] = {'a' : 'а', 'A' : 'А', 'b' : 'б', 'B' : 'Б', 'v' : 'в', 'V' : 'В', 'g' : 'г', 'G' : 'Г', 'd' : 'д', 'D' : 'Д', 'ye' : 'е', 'YE' : 'Е', 'yo' : 'ё', 'YO' : 'Ё', 'zh' : 'ж', 'ZH' : 'Ж', 'z' : 'з', 'Z' : 'З', 'i' : 'и', 'I' : 'И', 'j' : 'й', 'J' : 'Й', 'k' : 'к', 'K' : 'К', 'l' : 'л', 'L' : 'Л', 'm' : 'м', 'M' : 'М', 'n' : 'н', 'N' : 'Н', 'o' : 'о', 'O' : 'О', 'p' : 'п', 'P' : 'П', 'r' : 'р', 'R' : 'Р', 's' : 'с', 'S' : 'С', 't' : 'т', 'T' : 'Т', 'u' : 'у', 'U' : 'У', 'f' : 'ф', 'F' : 'Ф', 'kh' : 'х', 'KH' : 'Х', 'ts' : 'ц', 'TS' : 'Ц', 'ch' : 'ч', 'CH' : 'Ч', 'sh' : 'ш', 'SH' : 'Ш', 'shch' : 'щ', 'SHCH' : 'Щ', '\"' : 'ъ', '\"' : 'Ъ', 'y' : 'ы', 'Y' : 'Ы', '\'' : 'ь', '\'' : 'Ь', 'e' : 'э', 'E' : 'Э', 'yu' : 'ю', 'YU' : 'Ю', 'ya' : 'я', 'YA' : 'Я'}; 

現在你可以得到的值「a」在俄羅斯的

replace_list["russian"]['a'] 

通過這種方式,您可以根據自己的意願制定列表語言並將其擴展爲儘可能多的語言

+0

但它不適用於.each由於某種原因,這是我的問題:( – Stuffe

+0

地圖/對象,.each()函數作爲$ .each(地圖,函數(鍵,值){...});//其中map [key] = value; –