鉴于此HTML:
<div id="TABLE1" class="tabs">
<table>
<tbody datasrc="Music">
<tr id="randomid">lorem</tr>
<tr id="foo">lorem</tr>
<tr id="abcde">lorem</tr>
<tr id="fghijk">lorem</tr>
<tr id="lmnop">lorem</tr>
<tr id="qwerty">lorem</tr>
</tbody>
</table>
</div>
<div id="TABLE_2" class="tabs">
<table>
<tbody datasrc="Music">
<tr id="random5">lorem</tr>
<tr id="farhaf">lorem</tr>
<tr id="haerf">lorem</tr>
<tr id="hagasdg">lorem</tr>
<tr id="hrfafh">lorem</tr>
<tr id="qwerty">lorem</tr>
</tbody>
</table>
</div>
<div id="LASTTABLE" class="tabs">
<table>
<tbody datasrc="Music">
<tr id="rtefdgag">lorem</tr>
<tr id="wrtjfd">lorem</tr>
<tr id="reaht">lorem</tr>
<tr id="aggag">lorem</tr>
<tr id="rthhre">lorem</tr>
<tr id="argarg">lorem</tr>
</tbody>
</table>
</div>
我试图从每个表中随机触发2 <tr>
。我甚至无法做到这一点。
目前我的测试使用:
$("#button").on('click', function () {
$('#randomid').trigger('click')
})
但是这个触发器只是第一个表的第一行。
那我怎么能:
关于应用:
这是一个音乐播放器网站。每张桌子都有不同的音乐风格。 Rock,Alternative,Jazz等。有一个按钮'随机选择音乐')。该按钮将从每个表中触发2个随机tr,因此您最终会将2首爵士乐歌曲,2首摇滚歌曲等添加到播放列表中。该表看起来像这样:http://dribbble.com/system/users/31916/screenshots/167289/k-dribble.png?1309036379但这些复选框不是实际的复选框,而是在点击时改变位置的图像看起来和感觉比复选框更好,并且仍然像复选框一样。
用户可以通过单击行上的任意位置(逻辑)来触发“复选框”或选择一首歌曲,因此后端的开发方式可以捕获行中任意位置的点击,而不是特定的复选框(因此我我不是选择触发那些)。我不认为有一个更好的解决方案,只需从每个tble中随机触发2行点击。
支持IE8 +。
答案 0 :(得分:3)
请参阅下面的我的版本,
注意:下面的代码中有一些可以清理的演示代码和冗余变量,但我将它留在那里,以使代码看起来清晰且自我解释。
$(function() {
var $tables = $('table'); //gets the tree tables
var mQ = []; //music queue
var timer = null;
$('button').click(function () {
$('#result').html(''); //demo code
var t = 0, $tr;
var t1 = [];
$tables.each(function () {
$tr = $(this).find('tr');
t1[0] = Math.floor(Math.random()*$tr.length);
t1[1] = Math.floor(Math.random()*$tr.length);
while (t1[0] == t1[1]) { //To make sure not same row is selected
t1[1] = Math.floor(Math.random()*$tr.length);
}
mQ.push($tr.get(t1[0]));
mQ.push($tr.get(t1[1]));
});
timer = setInterval(function () {//Create timer to trigger click every 10ms
if (mQ.length == 0) {
clearInterval(timer);
return false;
}
$(mQ.shift()).click().addClass('selected');
}, 10);
});
$('tr').click(function () {
//do your magic
$('#result').append(this.id + '<br />');
});
});
答案 1 :(得分:3)
我首先会建议您以不同的方式执行此操作,但如果您已经开始触发点击事件,那么这就是一般性的想法。
$(".tab").each(function(){
var count = $(this).children(tr).length;
var r1 = Math.floor(Math.random()*count); //Get a random number less than the total count of rows
$(this).children('tr').eq(r1).trigger('click');//retrieve the nth (r1) item in the list and fire it's trigger event
});
答案 2 :(得分:1)
更新了小提琴上的新代码
也许更喜欢这个? ...
$(function() {
$("button").click(function(e) {
$(".selected").removeClass("selected");
$("table").each(function(i) {
var irand = {
a: Math.floor((Math.random()*($(this).find("tr").length)-1)+1),
b: undefined
};
while (irand.b == irand.a || irand.b == undefined) {
irand.b = Math.floor((Math.random()*($(this).find("tr").length)-1)+1);
};
console.log($(this).find("tr").filter(function(i) { return i == irand.a || i == irand.b }).addClass("selected"));
});
});
});