【问题标题】:Jquery Click Handler Not Working After Two TimesJquery Click 处理程序两次后不工作
【发布时间】:2013-12-25 12:10:09
【问题描述】:

我遇到了一个奇怪的问题。我正在使用 bing 翻译器 (http://www.bing.com/widget/translator) 并尝试使用他们的 API 自行定制它。

这是我的测试代码。

脚本:

$(document).ready(function (e) {
    var lang;
    $('#changeLang a').click(function (e) {
        Microsoft.Translator.Widget.Translate(null, 'en', null, null, function () {
            lang = Microsoft.Translator.Widget.GetAutoDetectedLanguage();
            alert(lang)
        });
        document.getElementById('WidgetFloaterPanels').style.display = 'none';
        var to = $(this).attr('id');
        if (to == "en") {
            Microsoft.Translator.Widget.Translate(lang, 'en');
            document.getElementById('WidgetFloaterPanels').style.display = 'none';
        } else if (to == "ja") {
            Microsoft.Translator.Widget.Translate(lang, 'ja');
            document.getElementById('WidgetFloaterPanels').style.display = 'none';
        } else if (to == "fr") {
            Microsoft.Translator.Widget.Translate(lang, 'fr');
            document.getElementById('WidgetFloaterPanels').style.display = 'none';
        } else if (to == "ru") {
            Microsoft.Translator.Widget.Translate(lang, 'ru');
            document.getElementById('WidgetFloaterPanels').style.display = 'none';
        }
    });
}); //ready ends

HTML:

<div id="changeLang">
 <a  href="#" id="en">English</a>
 <a  href="#" id="ja">Japenese</a>
 <a  href="#" id="fr">French</a>
 <a  href="#" id="ru">Russia</a>
</div>
<div>This paragraph needs to be translated</div>

现在,脚本运行良好,但前两次。例如,如果我点击日语,页面会相应地翻译,如果我点击返回英语或任何其他语言,页面也会相应地翻译。但是在第二次之后,如果我第三次点击任何语言。该功能不起作用。但它应该像在前两次点击中一样工作。我已经尝试了几个小时,但无法让它工作,所以我打开了问题。请有人指出问题所在。

【问题讨论】:

  • 您是否厌倦了像 firebug 或 ie 开发工具这样的 JavaScript 调试器?如果是这样,您在第 3 次尝试时是否收到任何错误消息?
  • 不,我还没有尝试过。让我试试。我会告诉你的
  • 我没有收到任何错误。既没有警告也没有错误。

标签: javascript jquery msdn


【解决方案1】:

似乎微软脚本在翻译过程中改变了 HTML 结构。因此,您必须使用委托:而不是$("#changeLang a").on("click", handler),您将使用$('#changeLang').on("click", "a", handler)。此外,您的代码可以简化:

var lang;
$('#changeLang').on("click", "a", function (e) {
    var to = $(this).attr('id');
    console.log("Translating from ", lang, " to ", to);
    Microsoft.Translator.Widget.Translate(lang, to);
    lang = to;
});

JSFIDDLE

【讨论】:

  • @user2982923 很高兴我帮助了你。不客气。 :-)
  • 你真的是一个生活品味。我在这上面浪费了很多时间。你能告诉我怎么找到的吗?
  • @user2982923 我使用 Chrome 中的开发人员工具检查了 HTML 代码。我看到在翻译过程中添加了&lt;font&gt; 元素。这意味着我们有动态元素,所以我们需要委托。
  • 我没有注意到。从来没有想过。谢谢你真棒:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2011-10-22
  • 1970-01-01
相关资源
最近更新 更多