[JS] Optie verwijderen uit select box geeft lege regel

Pagina: 1
Acties:

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Ik heb de search gebruikt en diverse onderwerpen over het verwijderen van een regel uit een selectie box gevonden, maar allemaal geven ze hetzelfde probleem. Wanneer ik de bovenste regel uit een selectie box verwijder als ik naar beneden ben gescrolled, dan krijg ik een lege regel te zien, welke eigenlijk niet leeg is, want er staat wel degelijk een waarde in. Het lijkt alsof er niet een refresh door IE gebeurt ofzo, want als even de pagina minimaliseer en weer teruggaat, dan issie goed.

Om een voorbeeld te geven (zie de html source voor de javascript code):
Scroll in de linker selectbox helemaal naar beneden en druk op "user 10"
URL: http://reddevil.ex-lab.net/select.html

ook de remove-functie (ipv een option op 'null' te zetten) geeft hetzelfde resultaat. Iemand een oplossing?

Verwijderd

zowel IE 6 als Moz geven niet het probleem weer dat jij beschrijft, misschien is het handig om even het versie nr. van je browser erbij te geven, want IE is nogal een ruim begrip.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
Ik heb het genoemde probleem ook niet. Overigens wel een erg eenvoudige bediening, zonder omslachtige DHTML e.d. Ik gebruik IE 6.0

Misschien kun je een screenshot plaatsen?

  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

Dit lijkt me een vette bug, als je een lege regel hebt moet je de helft van die regel even buiten het scherm houden, dan staat de linkerhelft er wel en de rest niet.

Die selectbox is een soort repaint functie nodig.

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 21-08 17:05
Mmm, inderdaad, ik zie het probleem (Win2000/IE6), Het is inderdaad puur een refresh probllempje.
Ik heb zelf ook zoiets in mijn CM en daar gebruik ik de volgende code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function moveSelectedOptions(from,to) {
    // Move them over
    for (var i=0; i<from.options.length; i++) {
        var o = from.options[i];
        if (o.selected) {
            to.options[to.options.length] = new Option( o.text, o.value, false, false);
        }
    }
    // Delete them from original
    for (var i=(from.options.length-1); i>=0; i--) {
        var o = from.options[i];
        if (o.selected) {
            from.options[i] = null;
        }
    }
    from.selectedIndex = -1;
    to.selectedIndex = -1;
}


met deze (dbl)click handler op de select:
JavaScript:
1
onDblClick="moveSelectedOptions(this,this.form.target)


En deze heeft het refresh probleem niet. (Overigens het enige 'verschil' dat ik zie is dat in mijn versie de 'selectedIndex' op -1 wordt gezet, waarbij ik me goed kan voorstellen dat dat het probleem is.

Overigens,
deze functie gebruik ik 'onsubmit' om alle waardes(values) uit de rechter box als comma seperated in een hidden field te plakken om ze te kunnen posten (misschien heb je er iets aan ;) )
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function MakeOptionsString(obj) {
    var result="";
    var sep="";
    for (var i=0; i<obj.options.length; i++) {
        result += sep + obj.options[i].value ;
        sep=",";
    }
    return(result);
}

function fix_onsubmit(formname,field,hiddenfield) {
    document.forms[formname].elements
    [hiddenfield].value=MakeOptionsString(document.forms[formname].elements[field]);
}

met dan op het form een onsubmit="fix_onsubmit('formuliernaam','selectboxnaam','hiddenfieldvoorvalues');"

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Even 2 screenies, de eerste is de huidige situatie, 2e is hoe hij na een repaint is (en dus wel goed):

Afbeeldingslocatie: http://reddevil.ex-lab.net/select1.jpg
Afbeeldingslocatie: http://reddevil.ex-lab.net/select2.jpg

PS. ik gebruik IE 6.0(.2800.1106) (op XP en win2k server)
De selectedIndex = -1 werkt ook niet ;(

PPS. beetle71 jou script geeft precies hetzelfde |:(

[ Voor 22% gewijzigd door reddevil op 22-08-2003 13:55 ]


Verwijderd

dat probleem treedt ook op bij tabellen. Wat helpt is de display effe op none zetten en na je remove weer restoren naar de originele waarde.

Verwijderd

Opnieuw opbouwen van je list vanuit een array, eerst de gehele list leeg maken door middel van option.length=0;

vervolgens opnieuw vullen en wanneer de user voorkomt in selected users, overslaan

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
TimD: dat kan inderdaad, maar m'n lijst heeft ongeveer 3000 regels en op m'n p4 2gig hier op m'n werk gaat dat al langzaam :(

mophor: display op none ??? Ik volg je niet helemaal ;)

Verwijderd

zo moeilijk is het toch niet? :P vóór dat je je node verwijderd je display van je list op none zetten en erna weer restoren, dan heb je dus gerepaint:

JavaScript:
1
2
3
4
5
6
function removeNode(list) {
  var oldDisplay = list.style.display;
  list.style.display = 'none';
  // je bende code om die node te verwijderen
  list.style.display = oldDisplay;
}

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
w00t thanks, problem solved _/-\o_ _/-\o_

Verwijderd

nope, problem worked around ;) blijft een enge bug
Pagina: 1