私がやろうとしていること:
<li>
2 つの特定の属性 (data-model
および) を持つ要素data-state
がクリックされると、関数は2 つの特定のデータ属性を持つdata-id
すべての<li>
要素の属性を収集し、それらを文字列に折りたたんで ajax 呼び出しの一部にする必要があります。
何がうまくいかないのか
関数が起動するたびに、これまでに呼び出された回数に基づいて、ますます多くの回数を起動し続けます (これは私を完全に混乱させます。以下のコンソールの出力を参照してください)。
また、.toggleClass()
は繰り返し (そしてますます頻繁に) 呼び出されるようになっているため、単純にactiveDomains
蓄積されているわけではありません。私はこれについて完全に完全に困惑しています.必要な情報があれば教えてください. 問題があれば、私は CakePHP で開発しています$this->Js-buffer()
が、Cake の JsHelper の代わりに、主に外部 JS ドキュメントまたはバッファリングされたスクリプト (つまり ) を使用しています。
マイコード
注: 名前空間の衝突を避けるために、私はjQuery.noConflict()を使用しているため、 $j
$j( 'li[data-model="domain"][data-state=0]').click( function() {
var controller = "subjects";
var action = "fetchByDomain";
//inspect and toggle state
$j(this).toggleClass("selected").attr("data-state", 1);
//collect list of domains to send to subjects controller
var activeDomains = [];
$j('li[data-model="domain"][data-state=1]').each(function () { activeDomains.push( $j(this).attr("data-id"))});
console.log(activeDomains); //see output below
//reload #subjectsList, WWW, APP, & DS are defined globally
$j("#subjectList").load(WWW + APP + DS + controller + DS + action + DS + activeDomains.join(","));
});
関連する HTML
<div class="row">
<div class="large-4 columns">
<div id="domainList" class="row">
<ul>
<li data-id="2" data-parentid="-1" data-model="domain" data-state=0 class="module-filter">English</li>
<li data-id="5" data-parentid="-1" data-model="domain" data-state=0 class="module-filter">Fine Arts</li>
<li data-id="3" data-parentid="-1" data-model="domain" data-state=0 class="module-filter">Mathematics</li>
<li data-id="1" data-parentid="-1" data-model="domain" data-state=0 class="module-filter">Psychology</li>
<li data-id="4" data-parentid="-1" data-model="domain" data-state=0 class="module-filter">Sociology</li>
</ul>
</div>
<div id="subjectList" class="row"></div>
<div id="excerptList" class="row"></div>
</div>
コンソール出力
1 ~ 5 の値を持つ 5 つのリスト要素があると仮定するとdata-id
、これは時間の経過に伴う出力です。
クリック<li data-id=1>
:
["1"]
クリック<li data-id=2>
:
["1","2"]
["1","2"]
クリック (もう一度) <li data-id=2>
:
["1","2"]
["1","2"]
少なくとも私にとっては、ここが本当に奇妙になります。
クリック<li data-id=3>
:
["1","2","3"]
["1","2","3"]
["1","2","3"]
["1","2","3"]
["1","2","3"]
["1","2","3"]