RulleRimfrost Skrevet 23. september 2011 Del Skrevet 23. september 2011 I helgen skal jeg fixe et lite web søkegrensesnitt som i utgangspkt kjører .net. Nå har jeg et problem .net ikke kan løse for meg, og jeg tenker JavaScript er det beste for dette. Jeg har en søkeboks (textbox1) og en resultatliste (listbox1). Søket fyres av når bruker trykker enter (textbox1_textchanged) og fyller listbox1 med resultater. Dobbelklikk på et element i listbox1 åpner separat dokument. Problemet er at på neste søk vil et element i listbox1 være selected, så når bruker trykker enter for å søke vil i stedet det valgte dokumentet i listbox1 åpne. Kan et JavaScript fjerne selected fra listbox1 ved "onFocus" på textbox1, på samme måte som metoden listbox1.ClearSelection()? Jeg har følgende kode nå som feiler totalt (klipp og lim, jeg kan ikke Java) : Protected Sub Page_Load Dim jName As [string] = "deSelectScript" Dim jType As Type = Me.[GetType]() Dim csm As ClientScriptManager = Page.ClientScript If Not csm.IsClientScriptBlockRegistered(jType, jName) Then Dim jText As New StringBuilder() jText.Append("<script type=""text/javascript""> function deSelect() {") jText.Append("var sel; if (document.selection && document.selection.empty) {") jText.Append("document.selection.empty();") jText.Append("} else if(window.getSelection(); {") jText.Append("sel = window.getSelection();") jText.Append("if(sel.empty) sel.empty();") jText.Append("if(sel.removeAllRanges) sel.removeAllRanges();") jText.Append("}} </script>") csm.RegisterClientScriptBlock(jType, jName, jText.ToString()) End If TextBox1.Attributes.Add("onfocus", "deSelect(); this.select();") End Sub Dette er scriptet jeg kopierte function deSelect() { var sel; if (document.selection && document.selection.empty) { document.selection.empty(); } else if(window.getSelection); { sel = window.getSelection(); if(sel.empty) sel.empty(); if(sel.removeAllRanges) sel.removeAllRanges(); } } Lenke til kommentar
JohndoeMAKT Skrevet 23. september 2011 Del Skrevet 23. september 2011 document.getElementById('sokeboksen').focus(); Løser det problemet? Lenke til kommentar
RulleRimfrost Skrevet 23. september 2011 Forfatter Del Skrevet 23. september 2011 Nei, merkelig nok. Jeg tror rett og slett "dobbelklikk"-funksjonen min i ListBox1 gjør noe den ikke skal. Om jeg bare merker (enkelklikker) et element i ListBox1 og så søker på nytt funker alt fint, men så snart jeg dobbelklikker overtar ListBox1 all fokus og nekter å slippe. Hele page_load ser da slik ut : Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'åpne filen med dobbelklikk på dem i lbxDocs... If Request("__EVENTARGUMENT") IsNot Nothing AndAlso Request("__EVENTARGUMENT") = "dobbelklikk" Then Response.ClearContent() Response.ContentType = "application/octet-stream" Response.AddHeader("Content-Disposition", "attachment; filename=" + ListBox1.SelectedValue) Response.TransmitFile(ListBox1.SelectedValue) Response.End() ListBox1.ClearSelection() End If TextBox1.Attributes.Add("onfocus", "document.getElementById('ctl00_ContentPlaceHolder1_TextBox1').focus()") ListBox1.Attributes.Add("ondblclick", ClientScript.GetPostBackEventReference(ListBox1, "dobbelklikk")) End Sub Lenke til kommentar
Wattengård Skrevet 27. september 2011 Del Skrevet 27. september 2011 Min første reaksjon er at du bør gjøre alt via client-side javascript, hilsen en som har vært igjennom webforms og alt tullet det medfører. Punkt to... Når du kjører "Response.End()" i Page_Load så er den sekvensen ferdig. ListBox1.ClearSelection() vil ikke ha noen funksjon. Det som skjer er at browseren din ser "Content-Disposition: attachment;", og da forventer den en filnedlasting, noe den også får. Men dette vil da si at hendelser som skjer etter dette ikke vil få noen spesiell virkning client-side. Du kjører ingen refresh av siden din. Jeg ville gjort alt clientside javascript, gjerne med jQuery $("#id_til_listbox").bind('dblclick', function () { var filename = $(this).children(":selected").text(); $(this).prop('selectedIndex','-1'); $("#id_til_textbox").val(''); window.location.href = filename; }); Noe som vil "av-velge" valgt linje i listboxen, rense tekstboksen, og trigge nedlasting av fila du vil ha. Alt over forutsetter at jeg har forstått deg riktig, i tillegg er koden utestet og tatt rett ut ifra mitt slitne hode ;P -C- Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå