0

私がやろうとしていること:

<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"]

4

1 に答える 1

0

activeDomains他の変数のようにグローバルにして、置き換えることができます

$j('li[data-model="domain"][data-state=1]').each(function () { activeDomains.push(  $j(this).attr("data-id"))});

activeDomains.push($(this).attr("data-id"));
于 2013-07-15T04:33:47.677 に答える