今天早些时候我在玩小提琴,试图回答一个问题,发现了一个令人困惑的事情。作为一个 JS 新手,我无法自己调试出了什么问题。我什至尝试检查$.fn.show
jQuery 源代码中的 source0 ,但无法弄清楚出了什么问题。
HTML:
<input type='text' id='dataBox'/>
<input type='button' value='toggle' id='toggleButton' />
jQuery代码:
jQuery(function ($) {
var _oldShow = $.fn.show;
$.fn.show = function (speed, oldCallback) {
return $(this).each(function () {
var obj = $(this),
newCallback = function () {
if ($.isFunction(oldCallback)) {
oldCallback.apply(obj);
}
obj.trigger('afterShow');
};
obj.trigger('beforeShow');
if(speed)
_oldShow.apply(obj, [speed,newCallback]);
else
_oldShow.apply(obj, [newCallback]);
});
}
});
$('#dataBox').bind('beforeShow', function () {
alert('beforeShow');
});
$('#toggleButton').click(function(){
$('#dataBox').show();
});
问题是我犯了一些错误,导致这条线无限次执行 obj.trigger('beforeShow');
因此alert
在这个块中
$('#dataBox').bind('beforeShow', function () {
alert('beforeShow');
});
似乎停不下来。
不管我要做什么,或者是否可以通过其他任何方式完成,有人可以在这里解释我做错了什么。我已经尝试了几个小时,但无法弄清楚。