Mam problem z następującym bitem kodu i zastanawiam się, co robię źle.

Dostaję nieoczekiwany błąd SyntaxError: nieoczekiwany token) na linii, w której wykonany jest połączenie Eval.

function myfunction(){
    var p1 = '';
    var p2 = '';
    var p3 = '';

    for (i=1; i<=3; i++){
        eval("$('#p"+i+"').closest('.filter').find('.vals div').each(function(){if ($.trim(p"+i+").length > 0) {p"+i+" += ',';} p"+i+" += $(this).attr('class');});");
    }
}

Oto obowiązujący HTML:

<div class="filter">
    <label>Organizations</label>
    <input id="p1" type="text" value="" />
    <div class="vals">
        <div class="3" title="Click to remove">ABC School District</div>
        <div class="4" title="Click to remove">DEF School District</div>
    </div>
</div>
<div class="filter">
    <label>Groups</label>
    <input id="p2" type="text" value="" />
    <div id="vals"></div>
</div>

Jeśli nie jest to całkowicie oczywiste, używam tutaj jQuery tutaj.

Dzięki

0
Ryan 26 październik 2011, 17:18

3 odpowiedzi

Najlepsza odpowiedź

Lepiej korzystasz z tablicy i zwykle wykonujesz kod:

function myfunction(){
    var p  = [null, '', '', '']; //Empty zeroth element to keep your 1-indexing

    for (i=1; i<=3; i++){
        $('#p'+i).closest('.filter').find('.vals div').each(function(){
            if ($.trim(p[i]).length > 0) {
                p[i] += ',';
            }
            p[i] += $(this).attr('class');
        });
    }
}
5
Dennis 26 październik 2011, 13:37

Twój kod, bez eval

function myfunction(){
    var p1 = '';
    var p2 = '';
    var p3 = '';

    for (i=1; i<=3; i++){
        $("#p"+i).closest(//..... rest here
4
Bart Vangeneugden 26 październik 2011, 13:27

Możesz brakować "

 eval("$('#p" + i + "'")...

FWI: Zamiast zagnieżdżenia funkcji i łańcucha, znacznie łatwiej jest złamać go na kilka dyskretnych linii kodu i używać nazwanych funkcji.

1
Steve Wellens 26 październik 2011, 13:24