触发Google Web翻译元素

Joh*_*ops 3 jquery google-translate

由于谷歌翻译api正在关闭,我试图让谷歌翻译网页元素在整个会话中为用户工作,这样他们就不必在每个不同的页面上将选择框选项更改为他们的语言.

初始加载函数如下:

function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'en'}, "google_translate_element");
 };
Run Code Online (Sandbox Code Playgroud)

google_translate_element是放置选择框的div.当选择框在那里时,它总是有"goog-te-combo"类.我可以使用jQuery更改框的值,没有问题,例如.$('.goog-te-combo').val('fr')将该框更改为法语.但是当我尝试使用$('.goog-te-combo').触发器()使用所有排序事件类型(更改,单击,鼠标,mousedown等)来触发翻译时,翻译永远不会触发.

有谁知道触发翻译的方法?

小智 11

这是一个古老的问题,但我会回答,因为我有同样的问题,并解决它.我必须从jQuery获取DOM并激活并执行.

 function fireEvent(element,event){
     console.log("in Fire Event");
    if (document.createEventObject){
            // dispatch for IE
            console.log("in IE FireEvent");
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
            // dispatch for firefox + others
            console.log("In HTML5 dispatchEvent");
            var evt = document.createEvent("HTMLEvents");
            evt.initEvent(event, true, true ); // event type,bubbling,cancelable
            return !element.dispatchEvent(evt);
    }
 }
Run Code Online (Sandbox Code Playgroud)

我称之为使用

 var jObj = $('.goog-te-combo');
 var db = jObj.get(0);
 jObj.val(Lang);
 fireEvent(db, 'change');
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但它产生了很多"达到最大叠加".只有改变我必须将initEvent的第二个参数更改为'false'.所以,这一行运行良好:`evt.initEvent(event,false,true);`.真的希望这有助于某人. (2认同)