这是一个带有图像和TTS的小网站的代码。 当您单击数字 1、2 和 3 时,您应该听到荷兰语的声音,当您单击带有"?"的 3 张图像时,也会听到。 在火狐中,一切都很好。我听到 6 个不同的数字,但不是在 Chrome 中。 在 Chrome 中,我听到 1、2 和 3,但图像下方的 4、5 和 6 不起作用。 正如您在代码中看到的,唯一的区别是添加的图像。 我将脚本保留在底部,以便可以先加载图像。 我正在搜索数小时(天(,但没有结果。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>test</title>
<script type="text/javascript">
var TextFileName = "../../sp_uploader/dagprogramma/test.txt";
</script>
<link rel="stylesheet" href="http://www.w3schools.com/lib/w3.css">
</head>
<body oncontextmenu="return false;">
<div class="w3-card"><span class="speech" id="zin1"></span></div>
<div class="w3-card"><span class="speech" id="zin2"></span></div>
<div class="w3-card"><span class="speech" id="zin3"></span></div>
<div class="w3-card"><img src="../../sp_uploader/dagprogramma/leeg.jpg" class="speech" id="zin4"></div>
<div class="w3-card"><img src="../../sp_uploader/dagprogramma/leeg.jpg" class="speech" id="zin5"></div>
<div class="w3-card"><img src="../../sp_uploader/dagprogramma/leeg.jpg" class="speech" id="zin6"></div>
<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
<script src="../../sp_js/leesfotoboek.js"></script>
</body>
</html>
这里是脚本:
var i;
var SpeechList = document.getElementsByClassName("speech");
var fnSpeech = function () {
console.log(this.innerHTML, " = innerhtml !!!");
responsiveVoice.speak(this.innerHTML, 'Dutch Female');
};
for (i = 0; i < SpeechList.length; i++) {
SpeechList[i].addEventListener("click", fnSpeech, false);
}
function fnHandleText(FileText) {
var TextArray = FileText.split(",");
console.log(TextArray);
for (var i = 0; i < TextArray.length-1; i++) {
document.getElementById("zin" + (i + 1)).innerHTML = TextArray[i];
console.log(document.getElementById("zin" + (i + 1)).innerHTML = TextArray[i]);
}
}
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
fnHandleText(this.responseText);
}
};
xhttp.open("GET", TextFileName, true);
xhttp.send();
正式的 img 元素不应该有子元素/html,所以修改 innerHTML 时的行为是未定义的。
与其将 innerHTML 添加到元素中,不如尝试为每个元素添加一个数据属性:
var fnSpeech = function () {
responsiveVoice.speak(this.getAttribute('data-speech-text'), 'Dutch Female');
};
for (i = 0; i < SpeechList.length; i++) {
SpeechList[i].addEventListener("click", fnSpeech, false);
}
function fnHandleText(FileText) {
var TextArray = FileText.split(",");
console.log(TextArray);
for (var i = 0; i < TextArray.length; i++) {
// Set the text for non-img elements
document.getElementById("zin" + (i + 1)).innerHTML = i + 1
document.getElementById("zin" + (i + 1)).setAttribute('data-speech-text', TextArray[i]);
}
}
我进行了一些编辑,以使我建议的代码与您的代码更兼容
这是一个jsFiddle来展示功能