Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery网站翻译在不同链接上使用.on().off()事件触发_Javascript_Jquery_Xml - Fatal编程技术网

Javascript Jquery网站翻译在不同链接上使用.on().off()事件触发

Javascript Jquery网站翻译在不同链接上使用.on().off()事件触发,javascript,jquery,xml,Javascript,Jquery,Xml,我有这个剧本: function jqueryxmltranslator(event) { // Jquery XML Translator var language = 'hungarian'; $.ajax({ url: 'lang/hu_HU.xml', success: function(xml) { $(xml).find('translation').each(function(){ var id = $(this).attr(

我有这个剧本:

function jqueryxmltranslator(event) {
// Jquery XML Translator
var language = 'hungarian';
$.ajax({
    url: 'lang/hu_HU.xml',
    success: function(xml) {
        $(xml).find('translation').each(function(){
            var id = $(this).attr('id');
            var text = $(this).find(language).text();
            $("." + id).html(text);
        });
    }
});
};
$('.menu-item-152 a').on('click', jqueryxmltranslator);
$('.menu-item-153 a').off('click', jqueryxmltranslator);
XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<translations>
    <translation id="menu-item-112 a">
        <english>Portraits</english>
        <hungarian>Portrék</hungarian>
    </translation>  
</translations>
<div class="menuContainer">
<div class="menu-item-152"><a data-language="Hungarian">Hungarian</a></div>
<div class="menu-item-153"><a data-language="English">English</a></div>
</div>

但这只是他妈的丑陋的解决方案

您正在呼叫
关闭
某些您没有呼叫
打开
的内容。
off
事件只是解除了指定事件的元素绑定,并且它看起来不像是为
打开了
。菜单项-153 a

您可能需要将
语言
变量作为数据属性存储在所选菜单链接中,然后可以重用该函数

或许与此类似:

function jqueryxmltranslator(event) {
// Jquery XML Translator
var language = $(this).data('language');
$.ajax({
    url: 'lang/hu_HU.xml',
    success: function(xml) {
        $(xml).find('translation').each(function(){
            var id = $(this).attr('id');
            var text = $(this).find(language).text();
            $("." + id).html(text);
        });
    }
});
};

// add the listener to all menu <a> tags
$('.menuContainer a').on('click', jqueryxmltranslator);
函数jqueryxmltranslator(事件){
//Jquery XML转换器
var language=$(this.data('language');
$.ajax({
url:'lang/hu_.xml',
成功:函数(xml){
$(xml).find('translation').each(function(){
var id=$(this.attr('id');
var text=$(this.find(language.text());
$(“+id).html(文本);
});
}
});
};
//将侦听器添加到所有菜单标记
$('.menuContainer a')。在('click',jqueryxmltranslator)上;
菜单的html结构如下所示:

<?xml version="1.0" encoding="utf-8"?>
<translations>
    <translation id="menu-item-112 a">
        <english>Portraits</english>
        <hungarian>Portrék</hungarian>
    </translation>  
</translations>
<div class="menuContainer">
<div class="menu-item-152"><a data-language="Hungarian">Hungarian</a></div>
<div class="menu-item-153"><a data-language="English">English</a></div>
</div>

匈牙利语
英语

谢谢!它工作得很好!但是,它仍然没有关闭下一个链接上的函数,只是使用XML中的英文行。如果可以关掉的话,我们就不需要英文台词了。更少的文件大小。不幸的是,原始HTML在DOM中被Hungarian/English/which替换,因此您需要有一个引用才能返回原始状态。这意味着您必须在某个地方有一个原始副本(比如当前的XML)。您可以将其放在XML中,也可以更改上面的javascript并为每个需要翻译的元素添加同级,通过向元素添加
hide
类来隐藏所有原始元素,并且只显示翻译后的同级元素。若要关闭,您可以删除所有已翻译的附加元素,并通过javascript取消隐藏原始元素。将翻译存储在XML中,并尝试使用JS将其读出为JS友好的格式,这会给已经相当复杂的问题增加极高的复杂性。谢谢您的回答!请重新访问我在本页底部的新问题。写在这里太长了: