HTML href onclick不会触发javascript函数
我被要求更新我的问题,因此: 我在数据库中有记录,其中一些记录附带了wave文件名。我在数据库中循环,想在一个名为audiofile的标题下的列中写出“Play”一词。单击“播放”时,音频播放器播放文件,并将href单词改为“暂停”。当我的代码在这些记录中循环时,它为每个href分配了一个单独的ID。要调用启动音频播放器的函数,我需要发送一个audioControl ID(aControl)变量以及音频播放器的src source file(thissource)变量,从而在函数调用中使用&和。当我在按钮中使用onclick事件时,它会触发函数。但是,当我单击href链接时(这是我想要的,而不是一个按钮)什么也没有发生。我不确定代码的哪一部分是混乱的,因为我在网上找到了功能代码。提前感谢您提供的所有帮助 无论我做什么,我的href onclick都不会触发javascript函数。我从函数中取出了返回false并将其放入href中,但这也不起作用。我在按钮中放入了相同的onclick代码,它触发的效果非常好 HTML: 您可以尝试:HTML href onclick不会触发javascript函数,javascript,html,Javascript,Html,我被要求更新我的问题,因此: 我在数据库中有记录,其中一些记录附带了wave文件名。我在数据库中循环,想在一个名为audiofile的标题下的列中写出“Play”一词。单击“播放”时,音频播放器播放文件,并将href单词改为“暂停”。当我的代码在这些记录中循环时,它为每个href分配了一个单独的ID。要调用启动音频播放器的函数,我需要发送一个audioControl ID(aControl)变量以及音频播放器的src source file(thissource)变量,从而在函数调用中使用&和。
window.passvariables = function(aControl, thissource) {
// Your code
};
我猜如果您的函数是在另一个函数中定义的(例如,在加载时执行)。因此“窗口”范围中没有定义“passvariables”。我看到您更新了您的问题,这很好:) 首先,我建议您使用javascript库,它更易于操作DOM,并且您可以在此站点上轻松找到资源和帮助 下面是您的代码应该是什么样子的。我还没有测试过它,但它很好地概括了应该是什么样子 将其放入HTML代码的
部分
<script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
$(document).ready(function() {
//Assigning onClick function for every HTML tags having the css class "Play"
$('.Play').click(function(){
if($(this).html() == "Play"){
//retrieving information about the audio
var waveFile = $(this).attr("data-waveFile");
var audioId = $(this).attr("data-audioId");
//calling the startAudio function and assign the Audio object to myAudioObject
var myAudioObject = startAudio(waveFile, audioId);
if(myAudioObject){
//Audio started playing
$(this).html("Pause");
}else{
alert("error while starting to play file");
}
}else{
var isPaused = pauseAudio(myAudioObject);
if(isPaused){
//The pauseAudio function returned true so the audio is paused
$(this).html("Play");
}else{
alert("error while pausing");
}
}
});
//Functions to manage audio Player
function startAudio(waveFile, audioId){
audioObject = document.getElementById("audio");
audioObject.src = waveFile;
audioObject.play();
return true;
}
function pauseAudio(){
//do whatever to pause
audioObject = document.getElementById("audio");
audioObject.pause();
return true;
}
});
</script>
$(文档).ready(函数(){
//为每个具有css类“Play”的HTML标记分配onClick函数
$('.Play')。单击(函数(){
如果($(this.html()==“播放”){
//正在检索有关音频的信息
var波形文件=$(此).attr(“数据波形文件”);
var audioId=$(this).attr(“数据audioId”);
//调用startAudio函数并将音频对象分配给myAudioObject
var myAudioObject=startAudio(波形文件,音频ID);
if(myAudioObject){
//音频开始播放
$(this.html(“暂停”);
}否则{
警报(“开始播放文件时出错”);
}
}否则{
var isPaused=pauseAudio(myAudioObject);
如果(i暂停){
//pauseAudio函数返回true,因此音频暂停
$(this.html(“Play”);
}否则{
警报(“暂停时出错”);
}
}
});
//管理音频播放器的功能
函数startAudio(波形文件,音频文件){
audioObject=document.getElementById(“音频”);
audioObject.src=波形文件;
audioObject.play();
返回true;
}
函数pauseAudio(){
//做任何事情来暂停
audioObject=document.getElementById(“音频”);
audioObject.pause();
返回true;
}
});
在HTML代码的
部分中,使用数据库数据构造表:
<table>
<tr>
<td>Song name</td>
<td>Action</td>
</tr>
<tr>
<td><%=WaveFile%></td>
<td><a href="#" class="Play" data-waveFile="<%=WaveFile%>" data-audioId="<%=AudioId%>">Play</a></td>
</tr>
</table>
<audio id="audio"></audio>
歌名
行动
注意
和
应该是循环中从数据库获得的值只需单击调用密码变量
而不使用返回
和have密码变量
返回false谢谢大家的帮助!我终于让它工作了!这是code:
yAudio = "'yourAudio" & thisline & "'"
aControl = "'audioControl" & thisline & "'"
thissource = "'/WaveFiles/" & RS.Fields("AudioIssues") &"'"
R"<td width=12 class=allprint><a href='#' class='Play' data-waveFile=" & thissource & " data-audioId=" & aControl & ">Play</a></td>"
// Call and play audio via JavaScript
$(document).ready(function()
{
var aElement = document.createElement('audio');
$('.Play').click(function()
{
if($(this).html() == "Play")
{
var waveFile = $(this).attr("data-waveFile");
var audioID = $(this).attr("data-audioId");
aElement.setAttribute('src', waveFile);
aElement.load()
aElement.addEventListener("load", function()
{
aElement.play();
$(this).html("Stop");
$(".duration span").html(aElement.duration);
$(".filename span").html(aElement.src);
}, true);
aElement.play();
$(this).html("Stop");
}
else
{
var waveFile = $(this).attr("data-waveFile");
var audioID = $(this).attr("data-audioId");
aElement.setAttribute('src', waveFile);
aElement.pause();
$(this).html("Play");
}
});
});
yAudio=“'yourAudio'&thisline&'”
aControl=“'audioControl'&thisline&'”
thissource=“”/WaveFiles/”&RS.Fields(“音频问题”)&“
R“
//通过JavaScript调用和播放音频
$(文档).ready(函数()
{
var aElement=document.createElement('audio');
$('.Play')。单击(函数()
{
如果($(this.html()==“播放”)
{
var波形文件=$(此).attr(“数据波形文件”);
var audioID=$(this).attr(“数据audioID”);
setAttribute('src',波形文件);
aElement.load()文件
AEElement.addEventListener(“加载”,函数()
{
aElement.play();
$(this.html(“Stop”);
$(“.duration span”).html(aElement.duration);
$(“.filename span”).html(aElement.src);
},对);
aElement.play();
$(this.html(“Stop”);
}
其他的
{
var波形文件=$(此).attr(“数据波形文件”);
var audioID=$(this).attr(“数据audioID”);
setAttribute('src',波形文件);
aElement.pause();
$(this.html(“Play”);
}
});
});
控制台中是否存在JavaScript错误?另外,“&aControl&“不是有效的HTML ID。aControl和YAudio是变量,因为我有多个实例,因为链接基于数据库中的记录。没有错误,它不会触发函数。我编辑了我的答案,请看一看,现在应该可以工作了。如上所述,aControl和YAudio是变量,因为我有多个实例,因为链接基于数据库中的记录。改变你的音频[方法]();你的音频(方法);也不做什么。谢谢你,你说得对,我不需要用退货。我改变了这个想法,希望这能成为问题所在,但它仍然不起作用
<table>
<tr>
<td>Song name</td>
<td>Action</td>
</tr>
<tr>
<td><%=WaveFile%></td>
<td><a href="#" class="Play" data-waveFile="<%=WaveFile%>" data-audioId="<%=AudioId%>">Play</a></td>
</tr>
</table>
<audio id="audio"></audio>
yAudio = "'yourAudio" & thisline & "'"
aControl = "'audioControl" & thisline & "'"
thissource = "'/WaveFiles/" & RS.Fields("AudioIssues") &"'"
R"<td width=12 class=allprint><a href='#' class='Play' data-waveFile=" & thissource & " data-audioId=" & aControl & ">Play</a></td>"
// Call and play audio via JavaScript
$(document).ready(function()
{
var aElement = document.createElement('audio');
$('.Play').click(function()
{
if($(this).html() == "Play")
{
var waveFile = $(this).attr("data-waveFile");
var audioID = $(this).attr("data-audioId");
aElement.setAttribute('src', waveFile);
aElement.load()
aElement.addEventListener("load", function()
{
aElement.play();
$(this).html("Stop");
$(".duration span").html(aElement.duration);
$(".filename span").html(aElement.src);
}, true);
aElement.play();
$(this).html("Stop");
}
else
{
var waveFile = $(this).attr("data-waveFile");
var audioID = $(this).attr("data-audioId");
aElement.setAttribute('src', waveFile);
aElement.pause();
$(this).html("Play");
}
});
});