gpt4 book ai didi

javascript - 为什么此代码可以在单独的文件上运行但不能内联

转载 作者:行者123 更新时间:2023-11-28 06:04:30 28 4
gpt4 key购买 nike

这个问题可能看起来很傻,但我真的不知道问题出在哪里。最初我有一个 .js 文件,仅具有此功能,可将音频添加到页面:

function addAudio(id_name, audio_filepath) {
var audio = $('<audio />')
.prop('id', 'audio' + id_name)
.prop('src', audio_filepath)
.text("Your reader doesn't support audio.");

$('body').append(audio);

$('#' + id_name).click(function () {
audio.get(0).play();
});
}

它在 html 中被这样调用:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<!-- some content here -->
<button id="test">Play</button>

<!-- reference to lib containing jquery -->
<script type="text/javascript" src="js/lib.min.js"></script>

<!-- script where the function addAudio resides -->
<script type="text/javascript" src="js/add-audio.js"></script>

<script type="text/javascript">
$().ready(function() {
addAudio('test', 'audio/01-test.wav');
});
</script>
</body>
</html>

效果很好。问题是当我尝试将函数移出文件并将其内联到脚本标记中时。在这种情况下,当我单击按钮时,控制台会打印 Uncaught TypeError: Cannot read property 'play' of undefined

这是修改后的代码:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<!-- some content here -->
<button id="test">Play</button>

<!-- reference to lib containing jquery -->
<script type="text/javascript" src="js/lib.min.js"></script>

<script type="text/javascript">
function addAudio(id_name, audio_filepath) {
var audio = $('<audio />')
.prop('id', 'audio' + id_name)
.prop('src', audio_filepath)
.text("Your reader doesn't support audio.");

$('body').append(audio);

$('#' + id_name).click(function () {
audio.get(0).play();
});
}

$().ready(function() {
addAudio('test', 'audio/01-test.wav');
});
</script>
</body>
</html>

试图隔离错误,我发现当函数位于.js文件中时,变量audio是一个jquery对象[audio#audiotest],但当函数内联时,该变量是对象n.fn.init {}

为什么会发生这种情况?

编辑

我注意到发生这种情况是因为它位于 xhtml 文件中(我正在制作 epub3 格式的电子书)。如果我将文件更改为 html ,它会再次工作。但这很奇怪,因为 xhtml 支持音频标签(您可以在此处查看规范: http://www.idpf.org/accessibility/guidelines/content/xhtml/audio.php ),并且就像我所说的,如果该函数位于单独的文件中,它就可以工作。那么为什么内联不呢?

最佳答案

我认为问题出在您的文件引用上。当我将您的代码放入 jsfiddle 时,它​​似乎可以引用互联网上的 wav 文件。

https://jsfiddle.net/ur64L8uh/

    function addAudio(id_name, audio_filepath) {
var audio = $('<audio />')
.prop('id', 'audio' + id_name)
.prop('src', audio_filepath)
.text("Your reader doesn't support audio.");

$('body').append(audio);

$('#' + id_name).click(function () {
audio.get(0).play();
});
}

$().ready(function() {
addAudio('test', 'http://download.wavetlan.com/SVV/Media/HTTP/WAV/Media-Convert/Media-Convert_test1_Alaw_Mono_VBR_8SS_16000Hz.wav');
});
}

关于javascript - 为什么此代码可以在单独的文件上运行但不能内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37010117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com