Javascript 在jquery上传递变量
只是在jQuery方面有一些问题 我想做的是: 我有一些音频控制按钮,如下所示:Javascript 在jquery上传递变量,javascript,jquery,html,variables,Javascript,Jquery,Html,Variables,只是在jQuery方面有一些问题 我想做的是: 我有一些音频控制按钮,如下所示: <p><a href='#' onClick="player1.loadAudio(1); return false;">Play audio</a></p> <div class="audio-player"> <div class="speaker"> </div> <div class
<p><a href='#' onClick="player1.loadAudio(1); return false;">Play audio</a></p>
<div class="audio-player">
<div class="speaker"> </div>
<div class="play" data-track="1"> </div>
<div class="pause"> </div>
</div>
但是页面上的内容太多了,所以我试图优化代码,并制作一个小功能,检查按钮上的div id,并添加告诉播放器播放什么曲目
所以我做到了:
<div id="audioControlButtons-1">
<div class="speaker"> </div>
<div class="play"> </div>
<div class="pause"> </div>
</div>
<script>
$(document).ready(function() {
$("[id^=audioControlButtons-] div.play").click(function() {
var id = new Number;
id = $(this).parent().attr('id').replace(/audioControlButtons-/, '');
//alert(id);
player1.loadAudio(id);
return false;
});
});
</script>
$(文档).ready(函数(){
$(“[id^=audioControlButtons-]div.play”)。单击(函数(){
var id=新编号;
id=$(this.parent().attr('id').replace(/audioControlButtons-/,'');
//警报(id);
播放器1.加载音频(id);
返回false;
});
});
我的问题是:
id未传递给播放机1。加载音频(id)
如果我硬编码播放器1.loadAudio(1)
它起作用了!但当我试图将变量传递给函数时,它就不起作用了
但是,如果您取消对警报(id)的注释,您将看到id正在生成
有人能帮忙吗
干杯,
丹,我想我明白你的问题了。变量id是一个字符串。尝试
player1.loadAudio(parseInt(id));
是的,初始化行是不必要的。只是使用
var id = $(this).parent().attr('id').replace(/audioControlButtons-/, '');
实际上,我对你的例子有点困惑,因为你最初有这样一个例子:
<p><a href='#' onClick="player1.loadAudio(1); return false;">Play audio</a></p>
但是你不再引用它了。你是说这个html:
<div id="audioControlButtons-1">
<div class="speaker"> </div>
<div class="play"> </div>
<div class="pause"> </div>
</div>
是你真正创造的吗?如果是这样,那么您可以这样重写它:
<p><a href='#' onClick="player1.loadAudio(1); return false;">Play audio</a></p>
<div class="audio-player">
<div class="speaker"> </div>
<div class="play" data-track="1"> </div>
<div class="pause"> </div>
</div>
然后在脚本块中:
<script>
$(document).ready(function() {
$(".audio-player > .play").click(function() {
var track = $(this).data('track');
player1.loadAudio(+track);
return false;
});
});
</script>
$(文档).ready(函数(){
$(“.audio player>.play”)。单击(函数(){
var track=$(this.data('track');
播放器1.加载音频(+曲目);
返回false;
});
});
所以这里发生了一些事情
div
一个类(.audioplayer
),这样它更通用,解析速度更快。您不想做像[id^=audioControlButtons-]
这样的事情,因为javascript这样遍历和解析DOM要慢得多。如果在页面上有多个相同的元素,那么一个类比ID更适合这样做播放
按钮中添加了您想要的曲目编号,作为数据
属性(数据曲目
)。使用data
属性可以在感兴趣的DOM元素上存储任意数据(即.play
按钮)。这样,您就不需要使用replace
方法来进行这种奇怪的DOM遍历,只需获取曲目编号即可。这样可以减少不必要的JS处理和DOM遍历李>
jQuery
的.data()
方法,并将的“track”
作为参数。然后将获得数据轨迹
属性值李>
player1.loadAudio
方法,前面有一个+
标志。这是一个小小的javascript技巧,允许您将值转换为实际数字(如果该方法需要的话)这里至少可以做一些其他优化—事件委派,而不是在
ready
事件中做所有事情—但这超出了本问题的范围。见鬼,即使是我的实现也可以稍微优化一点,但这需要更深入的解释 别担心!请把答案记下来!你确定它没有得到什么吗?在player1.loadAudio中输入一个警报(id),然后查看是否没有收到任何信息。