Gå til innhold

listbox.clearselection med JavaScript mulig?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...