如何从函数内部调用函数,使其变为递归?这是我的代码,我添加了一个注释,我想开始递归:
$('a.previous-photos, a.next-photos').click(function() {
var id = $('#media-photo img').attr('id');
var href = $(this).attr('href');
href = href.split('/');
var p = href[href.length - 1];
var url = '/view/album-photos/id/' + id + '/p/' + p;
$.get(url, function(data) {
$('.box-content2').replaceWith('<div class="box-content2"' + data + '</div>');
});
// here I want to call the function again
return false;
});
答案 0 :(得分:9)
答案 1 :(得分:4)
最佳答案已过时。目前(2012年8月)callee至少在Firefox中被弃用。使用被调用者已过时。目前(2012年8月)被调用者“......被ECMA-262弃用。”(见discussion)
这两者中更容易。通常,使用匿名函数的原因是保持名称空间清洁。括号定义了一个本地命名空间,因此在给函数命名后,它将无法在括号外访问。以下内容适合您:
$('.someclass').onClick( function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
这有点困难。由于唯一传递给函数的是事件对象,因此需要对其进行扩展以传入值。幸运的是,事实证明jQuery有一个系统just for this!
$('.someclass').on( 'click', {myvar: 0}, function dosomething(event){
... your code ...
event.data.myvar = event.data.myvar + 1;
dosomething(event) //again
});
注意:当您必须附加和分离处理程序以防止像DOMSubtreeModified这样的无限循环时,这尤其有用。
$('.someclass').on( 'DOMSubtreeModified.mynamespace', {myvar: 0}, function myfunc( event ){
$(this).off( 'DOMSubtreeModified.mynamespace' );
... Some Code that changes .someclass subtree ...
event.data.myvar = event.data.myvar + 1;
$(this).on( 'DOMSubtreeModified.mynamespace', {myvar: event.data.myvar}, myfunc );
});
答案 2 :(得分:3)
这种东西应该可以解决问题,但应该有更好的方法来设置它:
function myfunc() {
var id = $('#media-photo img').attr('id');
var href = $(this).attr('href');
href = href.split('/');
var p = href[href.length - 1];
var url = '/view/album-photos/id/' + id + '/p/' + p;
$.get(url, function(data) {
$('.box-content2').replaceWith('<div class="box-content2"' + data + '</div>');
});
if(!cond){//you need a condition, or it'll recurse indefinitely.
myfunc();
}
return false;
}
$('a.previous-photos, a.next-photos').click(function(){myfunc();});
答案 3 :(得分:1)
从Javascript 1.2开始,你可以使用arguments.callee(...)来实现对匿名函数的递归调用
// here I want to call the function again
arguments.callee();
答案 4 :(得分:1)
将您的代码置于jQuery插件格式中并调用自身,例如......
(function($) {
$.fn.togglethis = function () {
$(this).animate({opacity:"1.0"}, 1000, function() {
/* Code Here */
return $(this);
});
}
})(jQuery);
$(document).ready(function() {
$("#togglethis").togglethis();
});
在评论所在的位置插入所需的代码。