Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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 jqueryi++;而我——问题_Javascript_Jquery_Iphone - Fatal编程技术网

Javascript jqueryi++;而我——问题

Javascript jqueryi++;而我——问题,javascript,jquery,iphone,Javascript,Jquery,Iphone,有人能告诉我我做错了什么吗?我不是一个编程新手,但我今晚很想!每次我递增递增变量时,它都会抛出一个拟合!当向其中添加一个时,它的行为良好,但如果我尝试向其中添加一个,它会希望再添加两个。然后,如果我尝试去增量,它想从分配给它的原始数字中减去 我试过: i++; i = i+1; i = i++; 似乎什么都不管用。这一定是个愚蠢的错误 代码如下: var dayNum = 30; //-------------------------------------------------------

有人能告诉我我做错了什么吗?我不是一个编程新手,但我今晚很想!每次我递增递增变量时,它都会抛出一个拟合!当向其中添加一个时,它的行为良好,但如果我尝试向其中添加一个,它会希望再添加两个。然后,如果我尝试去增量,它想从分配给它的原始数字中减去

我试过:

i++;
i = i+1;
i = i++;
似乎什么都不管用。这一定是个愚蠢的错误

代码如下:

var dayNum = 30;
//----------------------------------------------------------------------
$.jQTouch({
        icon: 'dailyqoteicon.png',
        statusBar: false,
        initializeTouch: 'a.touch'
    });

//----------------------------------------------------------------------
$(document).ready(function(){
    //$(function(){});
    $(function(){
        $('a.touch').swipe( function(event, info){
            //alert("jQTouch swipe event"); 
            //alert(info.direction);
        });
    });
    $(function updateVerse(){
        //alert("updateVerse called");
        $.ajax({
            type: "GET",
            dataType: 'JSON',
            data: 'day='+ dayNum,
            url: 'forward.php',
            success: function(data){
                var obj = $.parseJSON(data);
                $("h2.quote").html("");
                $("h3.reference").html("");
                $("h2.quote").append(obj.quote);
                $("h3.reference").append(obj.reference, " ",  obj.version);
                //$("span.version").append(obj.version);
                //-----------------------------------
                // JSON string {"id":"1","quote":"For to me, to live is Christ, and to die is gain","reference":"Philippians 1:21","version":"NKJV"}
            },
            error: function(request, error){
                alert("problem retrieving json data string");
            }
        });
        function addDayNum(){
            dayNum = dayNum + 1;
            //dayNum = dayNum++;
        }
        function subDayNum(){
            dayNum = dayNum - 1;
            //dayNum = dayNum--;
        }

        $("div#header a.next").tap( function(){
            addDayNum();
            //dayNum++;// doesn't work at all
            //dayNum = dayNum + 1;//doesn't work at all
            updateVerse();
            //alert(dayNum);
            //alert("next clicked");
        });
        $("div#header a.prev").live('click', function(){
            subDayNum();
            //dayNum--;//doesn't work at all
            //dayNum = dayNum - 1;// doesn't work at all
            updateVerse();
            //alert(dayNum);
            //alert("previous clicked");
        });
    });
});

你不应该做
i=i++
。在C语言中,这是一种未定义的行为,称为两次修改变量,其间没有序列点——尽管我认为这在这里不适用

i++
将递增
i
并产生原始值。所以

i = 4
print i++ # prints 4
print i   # prints 5
因此,如果你说
i=i++
,你是说,增加
i
的值,然后将原始值分配给
i
。这太傻了


我怀疑你可能有更深层次的问题,但这是一件我马上就想到的事情。

我对jqTouch不太熟悉。但是发生的事情是,每次实际单击链接时,单击处理程序都会附加到链接上。因此,每次点击它都会跳过一节诗N+1次

编辑:我现在看到了。您的
updateVerse
函数具有以下功能:

$("a.next").tap( function(){
addDayNum();// doesn't work at all
//dayNum++;// doesn't work at all
    //dayNum = dayNum + 1;//doesn't work at all
updateVerse();
//alert(dayNum);
//alert("next clicked");
});
$("a.prev").tap( function(){
subDayNum();// doesn't work at all
//dayNum--;//doesn't work at all
//dayNum = dayNum - 1;// doesn't work at all
updateVerse();
//alert(dayNum);
//alert("previous clicked");
});
此代码应该只运行一次,并且每次实际点击链接时,它都会添加
tap()
处理程序。这就是为什么每次点击链接时都会跳过N+1节

以下是您的代码的外观:

var dayNum = 30;

//----------------------------------------------------------------------
function setupClickHandlers() {
        $("div#header a.next").tap( function(){
            addDayNum();
            //dayNum++;// doesn't work at all
            //dayNum = dayNum + 1;//doesn't work at all
            updateVerse();
            //alert(dayNum);
            //alert("next clicked");
        });
        $("div#header a.prev").live('click', function(){
            subDayNum();
            //dayNum--;//doesn't work at all
            //dayNum = dayNum - 1;// doesn't work at all
            updateVerse();
            //alert(dayNum);
            //alert("previous clicked");
        });
}

function updateVerse(){
        //alert("updateVerse called");
        $.ajax({
            type: "GET",
            dataType: 'JSON',
            data: 'day='+ dayNum,
            url: 'forward.php',
            success: function(data){
                var obj = $.parseJSON(data);
                $("h2.quote").html("");
                $("h3.reference").html("");
                $("h2.quote").append(obj.quote);
                $("h3.reference").append(obj.reference, " ",  obj.version);
                //$("span.version").append(obj.version);
                //-----------------------------------
                // JSON string {"id":"1","quote":"For to me, to live is Christ, and to die is gain","reference":"Philippians 1:21","version":"NKJV"}
            },
            error: function(request, error){
                alert("problem retrieving json data string");
            }
        });
        function addDayNum(){
            dayNum = dayNum + 1;
            //dayNum = dayNum++;
        }
        function subDayNum(){
            dayNum = dayNum - 1;
            //dayNum = dayNum--;
        }

}

$(document).ready(function(){
        $.jQTouch({
            icon: 'dailyqoteicon.png',
            statusBar: false,
            initializeTouch: 'a.touch'
        });

    setupClickHandlers();
        $('a.touch').swipe( function(event, info){
            //alert("jQTouch swipe event"); 
            //alert(info.direction);
        });

});

调用单击处理程序时,请尝试调用
alert()
。请注意,它可能会使您的浏览器无法操作,因为它不断弹出。您尝试
++
--
(除了
i=i++
是未定义的行为之外)没有任何错误。在Chrome中,它可以明显地多次更新诗句,并使用100%的CPU。也许单击处理程序以某种方式递归调用自身。

我想您不能在注释中发布代码。。。你通常使用我们的预标签还是所见即所得

@strelokstrelok听起来可能就是问题所在。下面是jQTouch中实际的tap()函数。函数中的参数是另一个函数吗?那会有什么不同呢

        $.fn.tap = function(fn){  
        if ($.isFunction(fn)){  
            var tapEvent = (jQTSettings.useFastTouch && $.support.touch) ? 'tap' : 'click';  
            return $(this).live(tapEvent, fn);  
        } else {  
            $(this).trigger('tap');  
        }  
    } 

还有,你到底为什么要嵌套
ready
处理程序呢?那
.tap()
在Chrome上也被破坏了。似乎注册了很多次。我注意到
.tap()
也注册了很多次,我不确定是他的代码还是这个页面是用iPhone构建的。哦,是的,他有更大的问题,相信我。这也是我的怀疑。这肯定是问题所在。我再看一遍,这与jQtouch无关。基本上,您的
updateVerse()
函数正在调用
$(“..”).tap(function(){…})。每当updateVerse被称为另一个点击/点击处理程序时,它所做的就是将另一个点击/点击处理程序附加到超链接。反过来,您所附加的每个处理程序实际上又在调用
updateVerse()
。因此,每次点击都会将+1点击/点击处理程序附加到链接上。您必须记住,当处理程序通过jQuery附加到元素时,它们是累积的,所以之前的处理程序不会被清除。这实际上只是我第二次使用jQuery。它和其他任何东西都不一样。。。嗯,也许我应该找一本书来读一读。或者直接去读jQuery文档。我现在明白了,非常感谢!似乎遗传在任何语言中都没有得到很好的解释,但它似乎每次都在咬我。