Javascript 注册点击按钮
我在JavaScript中创建了一个按钮,包含以下详细信息:Javascript 注册点击按钮,javascript,Javascript,我在JavaScript中创建了一个按钮,包含以下详细信息: <td id='2,A,B,C' onclick='enterKey(this.id)'>2</td> 意思是字符串[0]是2,字符串[1]是A,从今以后 我想问的问题是如何让JS注册多次按下按钮 因此,如果用户按两次-他们会得到A而不是2。如果他们按三次-他们得到B。但是如果他们按五次-它会回复到2 有没有关于我如何做到这一点的建议?非常感谢 一个简单的解决方案是在方法定义之外声明一个全局变量,并在每次按下
<td id='2,A,B,C' onclick='enterKey(this.id)'>2</td>
意思是字符串[0]是2,字符串[1]是A,从今以后
我想问的问题是如何让JS注册多次按下按钮
因此,如果用户按两次-他们会得到A而不是2。如果他们按三次-他们得到B。但是如果他们按五次-它会回复到2
有没有关于我如何做到这一点的建议?非常感谢 一个简单的解决方案是在方法定义之外声明一个全局变量,并在每次按下时递增它
var count = 0;
function enterKey() {
//Split and whatnot here
var myValue = string[count];
count++;
if(count == 5) {
count = 0;
}
}
一个简单的解决方案是在方法定义之外声明一个全局变量,并在每次按下时递增它
var count = 0;
function enterKey() {
//Split and whatnot here
var myValue = string[count];
count++;
if(count == 5) {
count = 0;
}
}
首先,您的ID无效: ID和名称标记必须以字母([a-Za-z])开头,后面可以是任意数量的字母、数字([0-9])、连字符(“-”)、下划线(“)、冒号(:”)和句点(“.”) 但是,假设您将其修改为使用句点或其他内容,您可以跟踪它,但只需将“单击计数”指定给td上的属性。例如:
<script type="text/javascript">
function incCounter(e){
var count = e.getAttribute('data-clicks') || 0,
id = e.getAttribute('data-clickid').split(',');
e.innerHTML = id[++count % id.length];
e.setAttribute('data-clicks', count);
}
</script>
<td data-clickid="2,a,b,c" onclick="incCounter(this);"></td>
功能计数器(e){
var count=e.getAttribute('data-clicks')| | 0,
id=e.getAttribute('data-clickid').split(',');
e、 innerHTML=id[++count%id.length];
e、 setAttribute(“数据点击”,计数);
}
然后读取数据属性以确定需要引用“ID数组”中的哪个元素。首先,您的ID无效: ID和名称标记必须以字母([a-Za-z])开头,后面可以是任意数量的字母、数字([0-9])、连字符(“-”)、下划线(“)、冒号(:”)和句点(“.”) 但是,假设您将其修改为使用句点或其他内容,您可以跟踪它,但只需将“单击计数”指定给td上的属性。例如:
<script type="text/javascript">
function incCounter(e){
var count = e.getAttribute('data-clicks') || 0,
id = e.getAttribute('data-clickid').split(',');
e.innerHTML = id[++count % id.length];
e.setAttribute('data-clicks', count);
}
</script>
<td data-clickid="2,a,b,c" onclick="incCounter(this);"></td>
功能计数器(e){
var count=e.getAttribute('data-clicks')| | 0,
id=e.getAttribute('data-clickid').split(',');
e、 innerHTML=id[++count%id.length];
e、 setAttribute(“数据点击”,计数);
}
然后读取数据属性以确定需要引用“ID数组”中的哪个元素。您将以某种方式动态附加它。例如,如果要对所有
元素执行此操作:
var elements = document.getElementsByTagName('td');
var i, element;
for(i = 0; element = elements[i]; i++) {
(function(element) {
var data = element.getAttribute('data').split(',');
var numClicks = 0;
element.onclick = function() {
enterKey(data[numClicks++ % data.length]);
};
})(element);
}
注意,我使用了
element.getAttribute('data')
而不是element.id
@FelixKling是正确的,这是一个无效的ID。您可能会以某种方式动态附加它。例如,如果要对所有
元素执行此操作:
var elements = document.getElementsByTagName('td');
var i, element;
for(i = 0; element = elements[i]; i++) {
(function(element) {
var data = element.getAttribute('data').split(',');
var numClicks = 0;
element.onclick = function() {
enterKey(data[numClicks++ % data.length]);
};
})(element);
}
注意,我使用了element.getAttribute('data')
而不是element.id
@FelixKling是正确的,这是一个无效的ID。像这样的吗
var count = 0;
function enterKey( string ) {
string = string.split( "," );
return string[(count++) % string.length];
}
像这样的
var count = 0;
function enterKey( string ) {
string = string.split( "," );
return string[(count++) % string.length];
}
我不认为
,
是ID的有效字符。您应该使用数据-
属性。关于您的问题:您基本上是希望每次单击都交替使用事件处理程序,还是希望根据用户单击的频率执行处理程序?与第一种情况一样,第一次单击执行处理程序A,第二次单击执行处理程序B,依此类推。在第二种情况下,两次快速单击将触发处理程序B,但不会触发处理程序A。文本被输入到文本字段中,id被传递到要添加到文本字段的函数enterKey中<代码>文档.getElementById('searchStr')。值+=字符串代码>-我特别希望按键模拟移动键盘。我不认为,
是ID的有效字符。您应该使用数据-
属性。关于您的问题:您基本上是希望每次单击都交替使用事件处理程序,还是希望根据用户单击的频率执行处理程序?与第一种情况一样,第一次单击执行处理程序A,第二次单击执行处理程序B,依此类推。在第二种情况下,两次快速单击将触发处理程序B,但不会触发处理程序A。文本被输入到文本字段中,id被传递到要添加到文本字段的函数enterKey中<代码>文档.getElementById('searchStr')。值+=字符串代码>-我特别希望按键模拟移动键盘。这非常有效,但当我单击按钮5次时,它将返回未定义,而不是返回数组中的第一个元素。你能给我解释一下什么count%=string.length代码>是吗?对不起,我已经更新了,现在应该可以用了。当一个值除以另一个值时,%运算符返回余数。因此,如果字符串长度为4,计数为4,4/4=1R0,将返回0(给出数组的起始索引)。如果我有多个tds,例如,23
——当我单击3时,它似乎仍然从以前开始计数,这是因为您从两个tds调用了相同的enterKey
函数enterKey
正在使用全局变量计数来跟踪。您必须有稍微不同的设置,才能为每个td提供不同的计数。Brad Christie举了一个例子来说明如何做到这一点。我现在正在研究它,但它似乎让人望而生畏,因为我对JS还很陌生!这非常有效,但当我单击按钮5次时,它将返回undefined,而不是返回数组中的第一个元素。你能给我解释一下什么count%=string.length代码>是吗?对不起,我已经更新了,现在应该可以用了。当一个值除以另一个值时,%运算符返回余数。因此,如果字符串长度为4,计数为4,4/4=1R0,将返回0(给出数组的起始索引)。如果我有多个tds,例如,23
——当我单击3时,它似乎仍然从以前开始计数,这是因为您从两个tds调用了相同的enterKey
函数enterKey
正在使用全局变量计数来跟踪。你得去滑一滑