1
我想提出一個表單驗證功能,並有下面的代碼爲它jQuery插件和封鎖
(function ($) {
$.fn.validate_thing = function (success_call_back) {
var call_back = true;
debugger;
if (!this.is('form')) {
return false;
}
$('input.empty').each(function() {
if(!$(this).text()) {
alert($(this).attr('name'));
call_back = false;
}
});
}
})(jQuery);
的問題是,在頁面加載時我得到一個JavaScript錯誤說「對象不是一個函數」在(jQuery)線上。如果我通過調試器完成這一步,我不會遇到這個問題。如果我把它放在文檔就緒函數中,我不會遇到這個問題。我認爲這可能與jQuery沒有被加載的腳本運行有關,但我在包含此代碼的庫之前包含jQuery庫,更不用說如果我不在閉包中執行此操作,即這樣做
$.fn.validate_thing = function (success_call_back) {
var call_back = true;
debugger;
if (!this.is('form')) {
return false;
}
$('input.empty').each(function() {
if(!$(this).text()) {
alert($(this).attr('name'));
call_back = false;
}
});
}
它的工作原理。
所以我有幾個解決這個問題的方法,但我仍然想知道爲什麼會發生這種情況。提前致謝。
這裏是如果你在上線得到一個錯誤,我以前也有在JavaScript頁面
engine = new function() {
this.request = function (params) {
var data = params.data ? params.data : '';
if (params.url) {
var url = params.url;
var page = document.URL.split('/').pop();
var page = page.split('.')[0];
data += 'content_page='+page+'.tpl';
}
else {
var url = document.URL;
}
debugger;
if (params.action) {
data += data ? '&action='+params.action : "action="+params.action;
}
$.ajax({
url : url,
type : 'POST',
data : data,
dataType: 'json',
success : function(data) {
debugger;
if (data && data.partials) {
for (var key in data.partials) {
var element = data.partials[key];
$('#'+element.partial_name).replaceWith(element.partial_content);
}
}
},
error : function (jqXHR, textStatus, errorThrown) {
debugger;
alert('ajax error: '+errorThrown);
}
}).success(params.success);
}
}
你在那之前還有其他的代碼嗎?如果在最後一行出現錯誤,它可能會將括號'(function(){...})解釋爲代碼之前的任何函數調用(我承認,這是一個長鏡頭)。 – 2012-07-23 23:56:26
'(function($){})(jQuery);'立即執行一個函數,傳入'jQuery'對象(在函數內部是'$')。對於你在做什麼,我認爲沒有必要使用附件 – MrOBrian 2012-07-24 00:06:26
@MrOBrian:在定義jQuery插件時通常會這樣做。全局'$'可能不會引用jQuery。 – 2012-07-24 00:16:43