javascript - jQuery .click命令顺序

标签 javascript jquery click

这是一个非常简单的问题/问题,我可以轻松解决,但是由于我正在学习JavaScript,所以我非常想知道为什么这个特定问题正在发生。

$("#go").click(function() {
    $("p").append(array[x] + " ")
    functionlist[array[x]]()
    x++
})​


这不起作用,正如我期望的那样。我希望它写入数组的当前内容,执行与某个函数名称关联的简单动画,然后递增x。一切正常,除了不增加x。

如果我这样做:

$("#go").click(function() {
    $("p").append(array[x] + " ")
    //functionlist[array[x]]()
    x++
})​


x成功增加。

所以我的问题是,为什么会这样?

这是我正在使用的jsfiddle的链接:http://jsfiddle.net/mxy6N/3/

最佳答案

好吧,如果您检查脚本控制台(大多数浏览器为F12),您会看到functionlist[array[x]]()会引发如下错误:


  对象没有方法“平滑”


这是因为array[x]等于“ smooch”,并且functionlist["smooch"]是未定义的,因此在将其放入您的x++之前会出错。

此代码中发生的其他事情:


x在函数内部声明,因此在使用时始终为0。
即使在函数外声明了它,但随着它的增加,它将用完要在数组中查看的项目。您需要在此处使用一两个模运算符。
您没有引用具有$ .fn.transition定义的.js文件,因此您的过渡调用也会出错。
flipflop都具有相同的rotateY值,因此一旦“翻转”就不会“失败”


以下是可能会做您想做的事情:http://jsfiddle.net/g5mJd/3/

以及更新的代码:

var array = ["smooch", "jab", "flip"];
var move = "flip";
var x = 0;
var functionlist = {
    flip: function() {
        $("#block").transition({
            perspective: '0px',
            rotateY: '180deg'
        }, 1000);
    },
    flop: function() {
        $("#block").transition({
            perspective: '0px',
            rotateY: '0deg'
        }, 100);
    }
};


$("#go").click(function() {
    var functionName = (x % 2 == 0) ? 'flip' : 'flop';
    var fn = functionlist[functionName];
    if($.isFunction(fn)) {
        fn();
    }
    var say = array[x % array.length];
    $('p').append(say + ' ');
    x++;
})​;


编辑:用$.isFunction()检查更新。

关于javascript - jQuery .click命令顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576014/

相关文章:

javascript - JS数组并排删除重复的字符串

php - HTML:启用多个提交而无需刷新

jquery - 使用jQuery获取迭代中元素的ID

jquery - jQuery关闭外部和内部点击重叠?

php - 通过在 PHP 和 Javascript 登录页面上按 enter 进行提交工作

javascript - 如何验证文本框应只包含A B C

javascript - Node.js Controller

javascript - 如何在计算机屏幕上获取元素的像素坐标

jquery - hashchange 仅当不是来自点击时

java - 从 onClick 事件/onClick 事件行为中获取数据