2009-08-25 19 views
1

Ich habe den jquery-Code, der eine Liste von IDs wie folgt zurückgibt 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 und so weiter für jedes Listenelement Ich habe auf der Seite auch eine Dropdown-Auswahlbox namens topfriendNumber. Ich muss den Wert aus der Dropdown-Box topfriendNumber übernehmen und sicherstellen, dass meine ID-Liste diese nicht überschreitet.Trunk eine Reihe von Zahlen auf eine bestimmte Länge

Also, wenn der Drop-Down als 4 ausgewählt ist, dann sollte es erlauben, nur 4 Nummern 1 | 2 | 3 | 4

unten auf diesem Code-Basis können Sie helfen?

Dies könnte wahrscheinlich in den unteren Teil hinzugefügt werden, wo es bereits die Nummer aus der Drop-Down-Box mit

<select name="topfriendNumber" id="topfriendNumber"> 
    <option value="3">3</option> 
    <option value="6" selected="selected">6</option> 
    <option value="9">9</option> 
    <option value="12">12</option> 
</select> 

function saveOrder() { 
    var serialStr = ""; 
    $("#topfriends li").each(function (i, elm) { 
     serialStr += (i > 0 ? "|" : "") + $(elm).attr("friendID"); 
    }); 
    // alert(serialStr); //1|2|3|4|5|6|7|8|9 
    $('select[name=topfriendNumber]').change(); 
    $.ajax({ 
     url: "exampe.php/SaveListOrder", 
     data: '{"ids":"' + serialStr + '"}', 
     dataType: "json", 
     type: "POST", 
     contentType: "application/json; charset=utf-8" 
    }); 
}; 


//changes the background colors depending on the amount selected from the dropdown list 
$('select[name=topfriendNumber]').change(function() { 
    var val = $(this).val(); 
    //reset style 
    $('ul#topfriends > li').css("background-color", ""); 
    //apply to all LIs before value of select 
    $('ul#topfriends > li:lt(' + val + ')').css("background-color", "red"); 
}).change(); 
+0

Schön, meinen Code in Produktion zu sehen;) – karim79

+0

Das sagte, ich verstehe nicht wirklich die Frage. Könntest du ein bisschen klären? – karim79

+0

es funktioniert gut, ich habe es funktioniert jetzt auf Drag/Drop-Update – JasonDavis

Antwort

3

Warum nicht kurz davor stehen und nicht einmal die Liste über das hinaus, was Sie brauchen?

var needed = $('select[name=topfriendNumber]').val(); 
$("#topfriends li").each(function (i, elm) { 
    serialStr += (i > 0 ? "|" : "") + $(elm).attr("friendID"); 
    if (i > needed) { 
     return false; 
    } 
}); 
+0

'$ (" #topfriends li "). Scheibe (0, benötigt) .each (...)' sicherer. Und kehrt von jeder Abkürzung es falsch zurück? Ich wusste nie;) – gnarf

+0

+1 - Das macht viel Sinn. – karim79

+0

Die einzige Beschwerde, die ich haben würde, ist der Mangel an geschweiften Klammern nach der if-Anweisung - ein klassischer Vorwand für einen bösen Fehler versehentlich eingeschrieben zu werden, werde ich bearbeiten. – karim79

0
var newSerialStr = serialStr.split('|').splice(0,topfriendNumber).join('|'); 
1

Kann ich ein Array schlage vor, mit der Bestellung speichern zuerst:

function saveOrder() { 
    var serials = []; // create an empty array 
    $("#topfriends li").each(function (i, elm) { 
     serials.push($(elm).attr("friendID")); // add Friend ID 
    }); 

    // quick way to get your old format string 
    // alert(serials.join("|")); //returns: 1|2|3|4|5|6|7|8|9 

    // assuming this is where that "number" is. 
    var $numberSelect = $('select[name=topfriendNumber]'); 

    var numOfFriends = parseInt($numberSelect.val(),10); // get the value 
    if (serials.length<numOfFriends) numOfFriends = serials.length; 

    // get an array from 0, numofFriends in length. 
    var serialStr = serials.slice(0, numOfFriends).join("|"); 
    // 1|2|3|4 if numOfFriends is 4. 

    // .... 
}; 

Wenn Sie beginnen, anstatt aus einem String:

function getListItems(listStr, length) { 
    var parts = listStr.split("|"); // split the string up into an array. 
    if (!length || (parts.length<length)) return parts.join("|"); 
    return parts.splice(0,length).join("|"); 
} 

alert(getListItems("1|2|3|4|5|6|7|8|9", 4)); // 1|2|3|4 

VoteyDisciples Antwort bringt einen guten Punkt - du brauchst nicht wirklich alle Freundschafts-IDs.

+0

das funktioniert super, danke – JasonDavis

Verwandte Themen