Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 注册点击按钮_Javascript - Fatal编程技术网

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 有没有关于我如何做到这一点的建议?非常感谢 一个简单的解决方案是在方法定义之外声明一个全局变量,并在每次按下

我在JavaScript中创建了一个按钮,包含以下详细信息:

<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
正在使用全局变量计数来跟踪。你得去滑一滑