Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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_Jquery - Fatal编程技术网

Javascript按钮侦听器触发一次?

Javascript按钮侦听器触发一次?,javascript,jquery,Javascript,Jquery,我正在为我正在制作的网站制作幻灯片式旋转器。旋转器本身工作正常,但我正在尝试使用键盘上的左/右键使幻灯片向前/向后滑动。我的代码是: $(document).keydown(function(e){ var currentPosition = 0; var slideWidth = 836; var slides = $('.slide'); var numberOfSlides = slides.length; var animLength = 600;

我正在为我正在制作的网站制作幻灯片式旋转器。旋转器本身工作正常,但我正在尝试使用键盘上的左/右键使幻灯片向前/向后滑动。我的代码是:

$(document).keydown(function(e){
    var currentPosition = 0;
    var slideWidth = 836;
    var slides = $('.slide');
    var numberOfSlides = slides.length;
    var animLength = 600;
    if (e.keyCode == 37) { 
          currentPosition = currentPosition-1;
            // Check to see if new position is unbounded, and wrap accordingly.
            checkForEnds(currentPosition);
            // Move slideInner using margin-left
            $('#slideInner').animate({
              'marginLeft' : slideWidth*(-currentPosition)
            }, animLength, 'easeOutExpo');
            animLength=600;
       return false;
    }
    /*Same code for right button, removed to save space.*/
    function checkForEnds(position){
    // If left is clicked on first slide, wrap to end.
    if(position==-1){currentPosition = numberOfSlides-1, animLength=1000}
    // If right is clicked on last slide, wrap to beginning.
    if(position==numberOfSlides){currentPosition = 0, animLength=1000}
  }
});
我的代码运行良好,但只有一次。我可以向左旋转一次或向右旋转一次,但旋转后,在按下另一个键之前,我不能重复使用同一个键。我对Javascript输入非常陌生,有没有简单的解决方法

这是临时地点。现在很混乱,但我可以很好地处理所有奇怪的排序和布局问题。
你知道如何使用调试器吗?在chrome中,按ctrl+shift+j并选择“脚本”选项卡。导航到您的代码并设置一组断点。刷新页面。。。然后,您可以实时查看发生的情况。

每次触发按键事件时,您都会重新定义“currentPosition”,而不管您在幻灯片中的当前位置如何。然而,这并不是代码的唯一问题,它将导致大量奇怪的行为。首先解决这个问题,然后从那里开始工作。Shawn是对的,使用调试器并设置断点。

好的,我解决了这个问题

这与您绑定事件的事实无关;事件已正确触发,但用于计算位置的方程式不正确

您正在块内定义
currentPosition
var;所以每次使用触发器事件时都会定义它;因此,一旦触发,您将始终获得相同的值

我解决这个问题的方法是将
currentPosition
移动到全局空间

在这里现场查看:


另外,请注意,在处理此类问题时,使用调试器对您来说很重要,我强烈建议您使用Google Chrome来解决这一问题。

从来都不知道您可以使用Element Inspector来实现这一点。不过,我仍在努力解决问题。那么,Chrome是广泛使用的javascript代码调试器吗?我通常编写Java代码,以前使用过调试器。我不知道为什么我从来没有想到在Javascript中使用一个。无论如何,这是有道理的。我对这类事情最大的恐惧是不理解我所犯的错误。每次我按下按钮,它都会将currentPosition设置回0。谢谢你的帮助。此外,我目前使用Dreamweaver键入代码,只是因为我从未使用过其他任何东西。你有没有其他选择的建议?我更喜欢Chrome,但你可以在几乎所有浏览器上使用调试器(读:Firefox、Safari、Opera)。我建议您使用console.log()输出日志消息,以查看代码的工作方式并使用断点;我个人的偏好是TextMate for Mac,这都是关于偏好的,所以你可以尝试VIM或EMACS,甚至记事本++记住,当你使用
var
语句时,你是在为该块定义它;如果您不使用
var
您将得到一个可用的变量(如果有的话)。或者它将在全局范围内创建变量(坏)