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文档。我现在明白了,非常感谢!似乎遗传在任何语言中都没有得到很好的解释,但它似乎每次都在咬我。