2017-01-26 8 views
0

に機能を.MAP使用した場合の最大コールスタックのサイズは、私は、コンソール上で、このエラーを取得してい超え:キャッチされない例外RangeError:jQueryの

$(document).on("change","select.task_activity", function(){ 

    selected_activity = $("select.task_activity :selected").map(function(){ return this.value }); 
    //selected_activity = $("select.task_activity").val(); 
    new_artifact_select = $("select.new_artifact"); 

    /* Loads artifacts select when one or more activities are selected */ 
    $.post("/tasks/activity_artifacts",{ 
    activity_id: selected_activity 
    },function(data, status){ 
    if (data){ 
     options = ""; 
     if (data.length > 0){ 
     for (i=0; i<data.length; i++){ 
      options += '<option value="'+data[i]['name']+'">'+data[i]['name']+'</option>'; 
     } 
     }else{ 
     options += '<option>This activity has no artifacts</option>'; 
     } 
    }else{ 
     options = '<option>Error</option>'; 
    } 
    new_artifact_select.html(options); 
    },"json"); 

}); 

エラートリガー:

Uncaught RangeError: Maximum call stack size exceeded 

ここに私のjQueryの抜粋です変更イベントがキャッチされたときここで

HTMLの作品:

<select class="task_activity" name="task1"> 
    <option value="">Select</option> 
    <option value="35">.........</option> 
    (...) 
</select> 
<select class="task_activity" name="task2"> 
    <option value="">Select</option> 
    <option value="36">.........</option> 
    (...) 
</select> 

私は配列で選択した項目のIDを持っている必要があります。マッピングはon( "変更")スコープの外で動作しますが、ブラウザがそのスコープの中でより多くの関数を受け入れることができないように見えます。

いくつかの代替手段はありますか?

+0

を使用する必要がある実際の配列を返すには、 '$の.post'で参照されるすべての変数を確認してください。 1つ以上の変数が定義されていない可能性があります。 –

+0

あなたは '.map()'が問題だと思いますか?私はそれが本当にあなたのコードがどのように見えているのか真剣に疑います。 – Pointy

+0

投稿したコードに '.map()'関数はありません。 – Barmar

答えて

4

あなたがselected_activityを使用しますが、それはjQueryオブジェクトではなく、配列

問題であることに注意してどのように示されていないあなたはおそらくあなたの$.post

のデータに渡ししようとしているということですあなたはget()

var selected_activity = $("select.task_activity :selected").map(function(){ 
    return this.value 
}).get(); 
+0

jQueryはPOSTクエリ文字列を作成しているときにこれを処理するだけではありませんか? (私は、値としてjQueryオブジェクトを持つパラメータを渡そうとしたことがないので、わかりません) – Pointy

+0

@Pointy答えは正しいと思います。私は、AJAXの 'data:'処理では、jQueryオブジェクトを特別に扱う処理はないと思っています。 – Barmar

+1

@Pointy no、内部jQueryは '$ param()'を使用してオブジェクトをエンコードし、jQueryオブジェクトをチョークします – charlietfl

関連する問題