同様の問題を検索してみましたが、私が置かれている苦境に一致するものはありませんでした.
プロジェクトの背景:Joomlaで観光ガイドサイトを構築中!+ SEBLOD + Youtheme ワープ。リゾートの登録ユーザー/所有者は、ビジネスを追加してリストに掲載できますが、場所を宣伝する必要があります。多くの州があり、後にリンクする多くのビーチがあるため、地域 (5 つの地域、地域カテゴリの SEBLOD/Joomla 記事 > 州 (州カテゴリの SEBLOD/Joomla 記事、 SEBLOD 関連記事フィールドから地域) > ビーチ (SEBLOD/Joomla コンテンツ タイプ、SEBLOD 関連記事フィールドによって州と地域にリンク)、したがって、選択のリスト オプションを減らします。
私の問題は次のとおりです。選択は、機能する JQuery/Ajax 関数から取り込まれますが、3 回の実行後、機能しなくなります。
私はFirefoxでFirebugを使用しています(「オフライン」で動作するため、ローカルホストで実行されています)およびWebDeveloper拡張機能。
次の JS エラーが表示されます: エラー 1 - webdeveloper から (Yootheme Warp に関連しているようです):
Timestamp: 13/07/2012 12:55:45
Error: TypeError: $.onMediaQuery is not a function
Source File: http://localhost/viapraia2/templates/yoo_master/js/template.js
Line: 37
エラー 2 - firebug から ((Yootheme Warp に関連しているようですが、上記と同じかどうかはわかりません)
TypeError: $.onMediaQuery is not a function
invalid: function() {
Yootheme Warp は複数の JQuery ライブラリが読み込まれていることを警告していますが、これらのエラーは私の問題とは関係がないと思います。ファイルを確認したところ、拡張子が個別にカプセル化されているように見えるため、競合することはありませんが、確信が持てません。スクリプトは数回動作するので、問題には関係ないと思います...
これは、関連するJSだと私が思うものです:
/**
* Check if RESORT select object exists and has value
**/
var resort = $j('#vp_related_resort');
var resortValue = (resort.length <0) ? 0 : resort.val();
var resortCatId = (isEmpty($j('#vp_resort_catid'))) ? 0 : $j('#vp_resort_catid').val();
var arrKeys = ['region', 'state', 'related_beach','resort'];
var varArr = [region, state, beach, resort];
mySelects={
'region':{'select':region,'value':regionValue,'catid':regionCatId},
'state':{'select':state,'value':stateValue,'catid':stateCatId},
'related_beach':{'select':beach,'value':beachValue,'catid':beachCatId},
'resort':{'select':resort,'value':resortValue,'catid':resortCatId}
};
/**
* Set AJAX request to retrieve STATES according to the REGION selected
* Change the STATES select content according to the result
**/
function _ajax(ajaxUrl,value,item,obj){
var nUrl = (item.match(/beach/)) ? '&item=beach' : '&item=' + item;
nUrl = ajaxUrl + nUrl;
$j.ajax ({
url: nUrl,
contentType: "application/json;charset=UTF-8",
success: function(data){
if(data.length) {
$j.each(data,function(c,d){
var o = new Option();
var newTitle = d.title;
$j(o).html(newTitle).val(d.id);
obj.append(o);
//obj.val(value);
});
}
},
beforeSend: function(){
obj.children("option:not(:first)").remove();
obj.hide();
},
complete:function(){
nUrl = ajaxUrl = '';
obj.show();
},
dataType: 'json',
});
}
/**
* Execute _ajax function when region SELECT changes
**/
region.change(function(){
var aUrl = theUrl;
if($j(this).val() > 0){
var w = arrKeys.indexOf('region');
var kArr = arrKeys;
kArr.splice(w,1);
var vArr = varArr;
vArr.splice(w,1);
aUrl = aUrl + 'region®ionSelectId=' + $j(this).val() + '®ionCatId=' + mySelects.region.catid + '&catid=';
for(var i=0; i < kArr.length; i++){
var v = 0;
if(vArr[i].length > 0) {
v = aUrl + mySelects[kArr[i]].catid;
_ajax(v, mySelects[kArr[i]].catid,kArr[i],vArr[i]);
}
}
}
});
ここでuser/testuser としてログインし、このフォームをロードすることでテストを行うことができ ます選び出す。どこからエラーを探し始めればよいかわかりません。
ありがとうございました!!
[更新] - [解決済み] 昨日 (そして寝不足!!) に何時間も費やした後、そして今日、ようやく問題を発見しました。それは間違いなく splice と indexOf メソッドの誤用でした。region.change 関数を置き換えて、キー配列とオブジェクト配列をループし、ループされた項目が select オブジェクト自体の処理された値と異なる場合にのみ ajax 呼び出しを実行しました。
誰かが気になる場合は、更新されたバージョンを次に示します。
/**
* Execute _ajax function when region SELECT changes
**/
region.change(function(){
var aUrl = theUrl;
var k = $j(this).attr('id').replace('vp_','');
if($j(this).val() != 0){
aUrl = aUrl + 'region®ionSelectId=' + $j(this).val() + '®ionCatId=' + mySelects.region.catid + '&catid=';
for(var i=0; i < kArr.length; i++){
var v = '';
if(kArr[i] != k) {
v = aUrl + mySelects[kArr[i]].catid;
_ajax(v, mySelects[kArr[i]].catid,kArr[i],vArr[i]);
}
}
}
});