Avatar billede jpeace Nybegynder
09. maj 2010 - 00:29 Der er 2 kommentarer og
1 løsning

Konflikt med genvejstaster på faneblade og TextBox'e, + javascript

Hej,

Jeg har et problem med genvejstaster på en webside.
Generel info:

Jeg bruger AjaxControlToolkit samt lidt javascript. Jeg kan/må ikke tage mere ind på nuværende tidspunkt. Visual Studio 2008 + asp.net.

Jeg har en relativt simpel asp.net side med faneblade hvor jeg har genvejstaster tilknyttet med nedenstående javascript. Desuden er der også javascript til TextBoxen med kalender tilknyttet.

Faneblade vælges med tryk på 1,2,3,4 eller 5 - uden brug af alt (da jeg ikke kan få det til at virke med fx. alt+1). Problemet er at når jeg taster i en TextBox så fanges indtastningen istedet som genvej og der skiftes faneblad. Dette sker dog ikke for alle mine textboxes.
TextBox'ene kan jeg dele op i 3 scenarier, hvor 1. virker som jeg ønsker det, mens 2 og 3 ikke gør:

1. TextBox - med tilknyttet MaskedEditExtender: [[/i]her virker det[/i]; dvs. jeg kan taste tal uden at det bliver fanget som genvejstast]
<asp:TextBox ID="TextBoxGebyr" Text="" CssClass="pengeFelt" runat="server" AccessKey="g"></asp:TextBox>
<ajaxControl:MaskedEditExtender ID="MaskedEditExtender1" runat="server" TargetControlID="TextBoxGebyr" Mask="99,999" MessageValidatorTip="true" MaskType="Number" InputDirection="RightToLeft" AutoComplete="false" AcceptNegative="None" />

2. TextBox - (Multiline) - genvejstaster fanges før input til textbox
<asp:TextBox ID="TextBoxMultiline" runat="server" TextMode="MultiLine" ShortcutsEnabled="false" CssClass="IndtastningsFelt1024"></asp:TextBox>

3. TextBox - med tilknyttet CalendarExtender: genvejstaster fanges før input til textbox
<asp:TextBox ID="TextBoxCalendarAcceptDate" runat="server" Width="100px" AccessKey="a"></asp:TextBox>
    <asp:Image ID="imageCalendarTil" runat="server" ImageUrl="~/images/icon_calendar.gif" ImageAlign="Top" />
      <ajaxControl:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="TextBoxCalendarAcceptDate"
PopupButtonID="imageCalendarTil"></ajaxControl:CalendarExtender>


Jeg tænkte først at jeg kunne tilføje en MaskedEditExtender til 2 og 3 også. Men det virker vist ikke for i hvert fald 3. For scenarie 2. kan det virke men så skal jeg vist angive en maske med 1000 "?" (1000 spørgsmålstegn)  - da man kan indtaste op til 1000 tegn. Med mindre der er en anden måde at angive det på?
For scenarie 3: så får jeg ikke noget output hvis jeg tilføjer en MaskedEditExtender som denne (dvs. at der må være fejl i html outputtet):
<ajaxControl:MaskedEditExtender ID="MaskedEditExtender3Test" runat="server" TargetControlID="TextBoxCalendarAcceptDate" Mask="99-99-9999" MessageValidatorTip="true" MaskType="Date" InputDirection="RightToLeft" AutoComplete="false" AcceptNegative="None" />

Link til maskededit:
http://www.asp.net/ajax/ajaxcontroltoolkit/samples/maskededit/maskededit.aspx

Nogen som kan fortælle mig hvordan jeg vil kan løse problemet så jeg kan taste tal også i scenarie 2. og 3. - uden at det bliver fanget af javascriptet og dermed bliver til genvej?

Eller bliver jeg nødt til at fjerne genvejstasterne for fanebladene, hvilket jeg synes vil være en skam.

På forhånd mange tak!





--------------------------------------------------

//
function DateField_KeyDown(dateField, calendarExtenderName) {
    lastKeyCodeEntered = window.event.keyCode;
    if ((lastKeyCodeEntered == '37')        //keyCode 37=left arrow
            || (lastKeyCodeEntered == '38')    //keyCode 38=up arrow
            || (lastKeyCodeEntered == '39')    //keyCode 39=right arrow
            || (lastKeyCodeEntered == '40'))    //keyCode 40=down arrow
    {
        var dtbehav = $find(calendarExtenderName);
        var enteredDate = dtbehav.get_selectedDate();

        if (enteredDate == null) {
            enteredDate = new Date();
        }
        else {
            advanceValue = 0;
            switch (lastKeyCodeEntered) {
                case 37:
                    advanceDays = -1;
                    break;
                case 38:
                    advanceDays = -7;
                    break;
                case 39:
                    advanceDays = 1;
                    break;
                case 40:
                    advanceDays = 7;
                    break;
            }
            enteredDate.setDate(enteredDate.getDate() + advanceDays);
        }
        dateField.value = (enteredDate.getMonth() + 1) + "/" + enteredDate.getDate() + "/" + enteredDate.getFullYear();
        dtbehav.set_selectedDate(dateField.value);
    }
}






// tabulator for besvar faneblade.
function ShortcutKeysBesvar(e)
{
    var evt = e || window.event
//    alert(evt.type);
//    alert(event.keyCode);

    // you have to use the TabContainer's ID that is in the "View Source" of the rendered page where the TabContainer is located.
    var tabContainer = $find('ctl00_contentPlaceHolderMain_ctl00_rykningsforespoergselAndBesvarelseViewPartRykningsforespoergselAndBesvarelse_TabContainerModtagOgBesvarRykning')
    //alert("tabContainer= " + tabContainer)
    document.defaultAction = false;
    // 1 Pressed For Tab 1
    if (window.event.keyCode == 49)
    //alert(window.event.keyCode); used to see if I got the right value
    {
        tabContainer.set_activeTabIndex(0); //Sets to Tab 1
    }
    // 2 Pressed For Tab 2
    if (event.keyCode == 50) {
        tabContainer.set_activeTabIndex(1); //Sets to Tab 2
    }
    // 3 Pressed For Tab 3
    if (event.keyCode == 51) {
        tabContainer.set_activeTabIndex(2);
    }
    // 4 Pressed For Tab 4
    if (event.keyCode == 52) {
        tabContainer.set_activeTabIndex(3);
    }
//    if (event.keyCode == 53 || event.keyCode == 98) {      // b = 98  - det virker men foreløbig kun tal.
    if (event.keyCode == 53) {      // b = 98
        tabContainer.set_activeTabIndex(4);
    }
}

// shortcuts til tabulator for Kontroller betingelser faneblade.
function ShortcutKeysKontroller(e) {
    var evt = e || window.event
    //    alert(evt.type);
    //    alert(event.keyCode);

    // you have to use the TabContainer's ID that is in the "View Source" of the rendered page where the TabContainer is located.
    var tabContainer = $find('ctl00_contentPlaceHolderMain_ctl00_rykningsforespoergselAndKontrollerBetingelserViewPart_TabContainerKontrollerBetingelser')
    //alert("tabContainer= " + tabContainer)
    document.defaultAction = false;
    // 1 Pressed For Tab 1
    if (window.event.keyCode == 49)
    //alert(window.event.keyCode); used to see if I got the right value
    {
        tabContainer.set_activeTabIndex(0); //Sets to Tab 1
    }
    // 2 Pressed For Tab 2
    if (event.keyCode == 50) {
        tabContainer.set_activeTabIndex(1); //Sets to Tab 2
    }
}
Avatar billede jpeace Nybegynder
09. maj 2010 - 19:20 #1
Problemet er delvist løst:

For MaskedEditExtender til calender TextBox'en skal jeg bruge denne Mask:

Mask="99/99/9999" MaskType="Date"

instead of Mask = "99-99-9999".

dvs. '/' istedet for '-'.
Avatar billede jpeace Nybegynder
09. maj 2010 - 23:19 #2
Desuden kan man bruge ?{1000} i Mask for ajaxControl:MaskedEditExtender til at begrænse antallet af tegn.

Dermed er mit problem nok løst. Er dog ikke altid helt glad for MaskedEdit så skal lige have undersøgt hvordan det spiller i praksis.
Avatar billede jpeace Nybegynder
14. juli 2010 - 11:20 #3
Jeg lukker spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester