2017-04-17 43 views
0

我试图用html和javascript制作多语言网站。 为了选择语言,我创建了三个单选框(值:en,de,fr)。 应该显示的单词存储在一个JavaScript对象中。如何将单选按钮值存储为变量

下面是代码:

$('#lang-setting').on('change', function() { 
var lang = $('input:checked', '#lang-setting').val(); 
console.log(lang); 
alert(lang); 
$('#latitude-n').html(lang.latitude); 
$('#longitude-n').html(lang.longitude); 
$('#accuracy-n').html(lang.accuracy); 
$('#words-n').html(lang.words); 
$('#map-n').html(lang.map); 
$('#test').html(de.test); 
}); 

警报(郎)我每次选择一种语言时CONSOLE.LOG给出正确的语言。

但是:换句话说没有改变。如果我用f.e替换'lang',他们会这样做。 'de'(见最后一行代码)。

+0

lang是一个字符串,所以lang.latitude是不确定的。如果您在翻译窗口中创建了一个名为de的全局对象,则需要执行的操作是window [lang] .latitude,如果lang ==='de' – juvian

+1

基本上是https:/ /stackoverflow.com/questions/4244896/dynamically-access-object-property-using-variable –

+0

[动态访问对象属性使用变量](http://stackoverflow.com/questions/4244896/dynamically-access-object -property-using-variable) – juvian

回答

2

你命名变量是一个字符串,因为你将其设置为无线输入的值,所以lang.latitudelang.longitudelang.accuracylang.wordslang.map都未定义。

我假设你有全局变量,如de设置自从你说de.test的作品。

将所有这些语言放到一个单独的对象中,然后您可以通过该键或无线电输入的值进行引用可能是最容易的。我还添加了一个变量,允许您选择默认语言和将执行实际html更改的函数。

var translate = { 
    default: 'en', 
    en: { 
     latitude: 'latitude', 
     longitude: 'longitude', 
     accuracy: 'accuracy', 
     words: 'words', 
     map: 'map', 
    }, 
    de: { 
     latitude: '', 
     longitude: '', 
     accuracy: '', 
     words: '', 
     map: '', 
    }, 
    fr: { 
     latitude: '', 
     longitude: '', 
     accuracy: '', 
     words: '', 
     map: '', 
    }, 
    changeText: function(lang) { 
     $('#latitude-n').html(translate[lang].latitude); 
     $('#longitude-n').html(translate[lang].longitude); 
     $('#accuracy-n').html(translate[lang].accuracy); 
     $('#words-n').html(translate[lang].words); 
     $('#map-n').html(translate[lang].map); 
    } 
} 

既然你不发表您的三个单选按钮的HTML,我要去,而不是给他们的名字,而不是属性的值为“郎设置”标识的,因为有重复的ID是无效的HTML 。以下是这些单选按钮的最小HTML。

<input name="lang-setting" value="en" type="radio" /> 
<input name="lang-setting" value="de" type="radio" /> 
<input name="lang-setting" value="fr" type="radio" /> 

然后你听众,我已经关掉它来听“点击”,而不是改变,因为单选按钮的值实际上没有改变,他们住,因为“en”,“ de“和”fr“。我还在文档中添加了函数调用,以便在页面加载时运行默认语言选择。

$('input[name="lang-setting"]').on('click', function(e){ 
    var lang = $(this).val(); 
    translate.changeText(lang); 
}); 
$(document).ready(function(){ 
    translate.changeText(translate.default); 
}); 

这里有一个working demo of it on JSFiddle

+1

这是最好的回答。 – Lewis

+0

我真的很喜欢你的解决方案。不幸的是,它给了我这个错误信息:无法读取未定义的属性“纬度” – AndiLeni

+0

您是否创建了对象的“翻译”变量?在控制台中,你应该能够输入“translate.de.latitude”,它应该给你任何你所做的价值。我不懂德语或法语,所以我只是将它们留为空字符串,但我想你已经在代码中将这些值复制/粘贴到它中。 – Tessa

2

它不工作,你需要括号符号。

var words = { 
 
    de: { 
 
    lat: "Breitengrad", 
 
    lon: "Längengrad" 
 
    }, 
 
    en: { 
 
    lat: "Latitude", 
 
    lon: "Longitude" 
 
    }, 
 
    fr: {} 
 
}; 
 

 
function changeLanguage() { 
 
    var lang = $('#lang-setting input:checked').val(); 
 
    $('#latitude-n').html(words[lang].lat); 
 
} 
 

 
$('#lang-setting input').click(changeLanguage); 
 
changeLanguage();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="lang-setting"> 
 
    <input type="radio" value="en" name="lang" checked>En</option> 
 
    <input type="radio" value="de" name="lang">De</option> 
 
    <input type="radio" value="fr" name="lang">Fr</option> 
 
</div> 
 
<p> 
 
    <span id="latitude-n"></span>: <input /> 
 
</p>

相关问题