使用Jquery将用户操作记录到数组
我试图在jquery中创建一个简单的用户点击动作记录器,但遇到了一些问题。我希望用户单击一个记录按钮,然后单击一次记录他单击的内容。然后按停止按钮停止录制。 到目前为止,我得到的是:使用Jquery将用户操作记录到数组,jquery,arrays,Jquery,Arrays,我试图在jquery中创建一个简单的用户点击动作记录器,但遇到了一些问题。我希望用户单击一个记录按钮,然后单击一次记录他单击的内容。然后按停止按钮停止录制。 到目前为止,我得到的是: var stack = new Array(); var recordmode = false; $('#record').click(function(){ recordmode = true; alert('You are now in record mode'); }); $('#stop').click
var stack = new Array();
var recordmode = false;
$('#record').click(function(){
recordmode = true;
alert('You are now in record mode');
});
$('#stop').click(function(){
recordmode = false;
console.log(stack);//output what's in the array
stack = []; //erase the array
});
$('#note_markers').click(function(){
if(recordmode){
$('.one_0').click( function(){ stack.push('one_0'); })
$('.one_1').click( function(){ stack.push('one_1') ; })
}
});
然后单击“开始”和“停止”按钮
<a id='record'>R</a>
<a id='stop'>stop</a>
<div id="one_notes">
<a class="one_0"></a>
<a class="one_1"></a>
<a class="one_2"></a>
<a class="one_3"></a>
</div>
R
停止
在停止和删除数组之前,我想用数组中记录的内容以/one_0/one_1/one_0等形式构建一个URL。(不过还没说到那部分)
发生的情况是,第一次单击没有被记录,然后它开始输入两个相同的元素。我不明白为什么我会有这种行为
有什么想法吗
作为旁注,是否有方法获取任何单击元素的名称?您可能希望尝试为要跟踪的每个操作分离单击处理程序
$('.one_0').click( function(){
if(recordmode){
stack.push('one_0');
}
});
$('.one_1').click( function(){
if(recordmode){
stack.push('one_1');
}
});
看起来有很多重复的代码。。。让我们试着清理一下。为什么不更进一步,给你所有的“可记录”动作一个具有唯一rel
属性的类呢
使用更流行的1.7+jQuery语法
您可以使用上面提到的方法捕获对任何元素的单击。。。但是,我建议您准确地标记要捕获的操作,无需捕获所有操作…您的问题是,您从
\note\u markers
中获得一次单击,并从中获得一次单击
试试这个:
$('#note_markers a').click(function(){
if(recordmode)
stack.push($(this).attr('class'));
});
您可以更改事件侦听器以侦听您实际需要的任何内容,但这将根据提供的html实现您想要的功能请包含更多的html。什么是#注意_标记
和.one\u 0
?只要元素有名称,$('*')。on('click',function(){alert($(this).attr(“name”);})
将为您提供任何元素的名称。$('*')
几乎总是一个非常糟糕的主意。使用$(文档)。在('click',…)
上!把他们分开就行了…谢谢!我把它们作为不同的类来处理其他事情,但我会看看是否可以使用rel属性和相同的类。按照idrumgood的建议,是否会有一些开销?这两种方法都很有效,但idrumgood的代码行对我来说肯定少了很多。您能解释一下这样做的缺点吗?his将捕获
标记,这些标记是#note_markers
元素的后代。如果你想做到这一点,那么这是最好的方式。就个人而言,我喜欢将元素组合在一起,并且尽可能具体。更好的选择器应该是A.recordable
(如果我们仍然只讨论
标记。我明白你的意思……我只需要重新考虑一下。再次感谢你的帮助!
var targetURL = _base_url + stack.join('/');
$('#note_markers a').click(function(){
if(recordmode)
stack.push($(this).attr('class'));
});