javascript - 微软翻译器 AJAX API,下拉更改 languageTo 和 languageFrom?

标签 javascript html api microsoft-translator

我正在尝试为我的网站编写一个翻译框。到目前为止,我已经能够从教程中获得工作代码:

<input id="ori" type="text" />
<button onclick="translate();">Translate</button>
<div id="trans"></div>

<script>
var languageFrom = "en";
var languageTo = "fr";

function translate() {
document.getElementById('trans').innerHTML="Translating... please wait";
var text= document.getElementById('ori').value;
window.mycallback = function(response) {
document.getElementById('trans').innerHTML=response;
}

var s = document.createElement("script");
s.src = "http://api.microsofttranslator.com/V2/Ajax.svc/Translate?oncomplete=mycallback&appId=<MY-APP-ID>&from=" + languageFrom + "&to=" + languageTo + "&text=" + text;
document.getElementsByTagName("head")[0].appendChild(s);
}
</script>

(从这里编写脚本:http://wizardsoweb.com/microsoftbing-translator-ajax-example/2011/05/?wpmp_switcher=desktop)

基本上,一旦我填写了我的 APPID,它就会将 ori 文本框中的文本翻译成法语。当然,这一切都很好,但这是我想要做的:

我想要有两个下拉菜单。一个将使用指定语言填充 languageFrom 变量,另一个将使用指定语言填充 languageTo 变量的下拉菜单。

我已经在另一个帖子中发布了关于此事的信息:Update script var's with value from drop down? .这样,当您从下拉菜单中选择一个值时,它会填充变量。我在 jsFiddle 上有一个这样的工作示例:

http://jsfiddle.net/charlescarver/hk2bJ/1/

(我包含了我的 API key ,这样更容易处理)

SO,我认为这个问题是当变量为空时加载控制翻译的脚本,然后在选择下拉选项时不更新。

我认为这可以通过在单击按钮时而不是在加载页面时调用脚本来解决。如何做到这一点? Microsoft 支持的文档很少,我无法在那里或在谷歌上找到解决方案。这是 API 文档的链接:http://msdn.microsoft.com/en-us/library/ff512385.aspx

最佳答案

您正在尝试将事件处理程序附加到对象 (select1 和 select 2) ,而这些对象实际上尚不存在(查看您的 jsfiddle 示例) - 这会中断你脚本的其余部分,因为你实际上没有附加任何东西。

所以你需要做这样的事情(不是最伟大的约定,但它证明了这一点)

window.onload = function()
{
    document.getElementById("select1").onchange = function() {
        languageFrom = this.value;
    }
    document.getElementById("select2").onchange = function() {
        languageTo = this.value;
    }
}

(这意味着您只会在所有内容都已加载并可用后附加事件)

您还可以在 html 元素中执行一些内联​​操作,如下所示:

From: <select id="select1" onchange="languageFrom=this.value">
<option value="en">En</option>
<option value="fr">Fr</option>
</select>

To: <select id="select2" onchange="languageTo=this.value">
<option value="en">En</option>
<option value="fr">Fr</option>
</select>

或者另一种方法是在翻译函数中执行所有操作(这意味着您不需要将任何内容附加到下拉列表中,也不需要定义任何全局变量)

function translate() {
    document.getElementById('trans').innerHTML="";
    var text= document.getElementById('ori').value;
    window.mycallback = function(response) {
    document.getElementById('trans').innerHTML=response;
    }

    var languageFrom = document.getElementById("select1").value;
    var languageTo = document.getElementById("select2").value;
    var s = document.createElement("script");
    s.src = "http://api.microsofttranslator.com/V2/Ajax.svc/Translate?oncomplete=mycallback&appId=8B841CA7C1A03443682C52AD07B7775A7BD5B3AA&from=" + languageFrom + "&to=" + languageTo + "&text=" + text;
    document.getElementsByTagName("head")[0].appendChild(s);
}

关于javascript - 微软翻译器 AJAX API,下拉更改 languageTo 和 languageFrom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8024588/

相关文章:

javascript - 主干 $el 错误

javascript - 如何判断多个<select>中选择了哪些选项?

javascript - 离开页面时 ngFor 循环内容消失

html - 具有动态模板的 Vue.js 组件(例如事件处理程序)

javascript - 在 html 元素中显示数据

python - 如何使用python访问笔记本电脑的内置红外网络摄像头?

c++ - 如何 Hook 时间功能

javascript - 单选按钮验证工作不正常

javascript - 全屏 HTML5 视频要大吗?

rest - 公共(public)API架构