フォーム検証関数を作成しており、次のコードがあります
(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);
問題は、ページが読み込まれると、(jQuery) 行に「オブジェクトは関数ではありません」という JavaScript エラーが表示されることです。デバッガーでこれを実行すると、この問題は発生しません。これをドキュメント対応関数に入れた場合、この問題は発生しません。このスクリプトの実行で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);
}
}