这里有什么我做错了吗?
$('#cancelEdit').on('click', 'button', null, app.core.toggleFilterNavForSummary);
奇怪的是,当我以这种方式运行它时,
$('#cancelEdit').on('click', 'button', function(){
app.core.toggleFilterNavForSummary();
});
是我试图传递处理程序或回调本身的问题吗?
我可以这么说,回调有一个参数,它寻找传入,如果它为null,那么它会做一些不同的事情。但如果您注意到上述情况,则两者都为空。
继承了大部分回调处理程序
core.toggleFilterNavForSummary = function(criteria){
var $liElem,
text,
criteria = criteria || null,
parent = $('#filterSelectedList'),
ulBox = $('#filterCriteria'),
editButton = $('#reviseSearch'),
nav = $('#filterNav');
parent.collapse('show'); //alt - parent.hide();
nav.collapse('hide'); //hide filter dropdown, then show criteria summary
if(criteria){
//empty first li in filter criteria list, and remove everything AFTER it.
ulBox.find('li:first-child').empty().nextAll().addClass('hidden');
//now loop selected filter criteria and append html to display
$.each(criteria,function(index,value){
if(index == 'a'){
var $liElem = ulBox.find('.a'),
text = $liElem.data('text'),
capitalized = value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();
$liElem.empty().append(text + capitalized);
} else if (index == 'b') {
var $liElem = ulBox.find('.b');
$liElem.empty().append(value).removeClass('hidden');
} else if (index == 'c') {
$liElem = ulBox.find('.c');
$liElem.empty().append(value).removeClass('hidden');
}
});
}
ulBox.removeClass('hidden');
editButton.removeClass('hidden');
// unhidde result-dashboard
$('#result-dashboard').removeClass('hidden');
// unhide results
$('#results').removeClass('hidden');
}
问题是,当我使用上面的第一个表单将其作为null传递时,它实际上不是null,它会以此形式返回
Object { originalEvent=Event click, type="click", timeStamp=18446744071694688000, more...}
答案 0 :(得分:1)
将函数作为处理函数传递时,参数不会被定义。事件处理程序接收一个参数Event
对象。因此,您需要使用匿名函数包装器来阻止将该参数传递给您的方法。
如果您不想这样做,可以使用
中的一种技巧How to determine if Javascript object is an event?
确定criteria
是否为事件:
criteria = criteria || null;
if (typeof criteria == "object" && isEvent(criteria)) {
criteria = null;
}