0

我有这个脚本:

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>

这将通过扩展的 XML 文件将我的网站翻译成特定语言。它工作正常,但 .off() 没有关闭该功能。我不知道javascript。这段代码有什么问题?

这是另一种可行的解决方案,我可以在其中将其关闭翻译-它从 XML 调用原始英文行...

$('.menu-item-152 a').on('click', function(e){ 
// Jquery XML Language 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-153 a').on('click', function(e){ 
// Jquery XML Language Translator
var language = 'english';
$.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);
        });
    }
});
});

但这只是该死的丑陋解决方案!

4

1 回答 1

1

你在呼唤off一些你没有呼唤的东西on。该off事件只是取消绑定指定事件的元素,它看起来不像你有一个onfor .menu-item-153 a

http://api.jquery.com/off/

您可能想要做的是将language变量存储在所选菜单链接中作为数据属性http://api.jquery.com/data/,然后您可以重用该函数。

或许与此类似:

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);

并且您的菜单的 html 结构将是这样的:

<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>
于 2013-09-08T20:31:16.177 回答