webForumDet fria alternativet

Hitta vilken kontroll som är i focus javascript/jquery

5 svar · 926 visningar · startad av Sanji

SanjiMedlem sedan juli 2009356 inlägg
#1

Hej! Jag har ett formulär som autosparar värden från textboxar när man fyllt i dessa och tabbar vidare. Problemet jag har är att vissa av textboxarna är valfria att fylla i, så därför vill jag kolla efter vilken kontroll som är i fokus för tillfället, och om ingen av kontrollerna är i fokus efter att ett värde har fyllts i, så ska alla värden sparas.

Jag försöker med hjälp av document.activeElement.id att hitta vilken kontroll som är i fokus, och detta fungerar precis som jag vill i internet explorer, men fungerar inte i chrome. Jag har inte testat i Firefox, men som jag fattat det så ska document.activeElement fungera där.

Finns det något annat sätt man kan använda sig av för att hitta vilken kontroll som är i fokus?

Kanske skriva en egen funktion i jquery för att uppnå detta? Jag har dock inga idéer på hur...

Snälla hjälp mig! :)

//Mvh Marcus

voigtann1Medlem sedan juni 20018 810 inlägg
#2

spontant så känns det som du skall använda dig av blur + kolla värdet och om värdet är något så kör du ett AJAX callback?

$(":input:visible").bind("blur",function(e) {
if (this.value !== "") { /* AJAX and stuff...*/
});

Men Chrome och Firefox ge resultat på

document.activeElement

även för Firefox och i Chrome också

men om dina element inte har ett ID så kommer inte document.activeElement.id ge någon info tillbaka.

SanjiMedlem sedan juli 2009356 inlägg
#3

elementen som jag kollar har allihopa ett id.

så här kollar jag det:

if (document.activeElement.id != "ctl00_MainContent_lstDropDown" && document.activeElement.id != "ctl00_MainContent_ctl00_MainContent_txtAddInquiryArticleTerm" && document.activeElement.id != "ctl00_MainContent_txtAddInquiryArticlePcs" && document.activeElement.id != "ctl00_MainContent_txtAddInquiryArticleSuborder")//  && document.activeElement.id != "ctl00_MainContent_txtAddInquiryArticleRevnumber"
                    {

jag kör även en alert som skriver ut document.activeElement.id innan if-satsen, och i IE ser jag det rätta id't, men får en tom ruta i chrome.

jag hittade nyss denna kodsnutt på ett forum, men stängde av misstag ner länken så jag kan tyvärr inte länka tillbaka dit:

function getElementWithFocus()
{
var rtnValue = null;
for(var i=0;i<document.all.length;i++)
{
try
{
if ( document.all.items[i].gotFocus )
{
// assume that element has name and/or id.
alert( document.all.item[i].name + ' has focus!');
rtnValue = document.all.items[i];
break;
}
}
catch (ex)
{
// catch exception for when the element doesn't support the gotFocus attribute.
}
return rtnValue;
}
}

men då jag kör denna händer inte ett jota heller.

jag ska se om jag kan lösa det på sättet du skrev, men har fortfarande svårt att greppa exakt hur jquery fungerar så det kommer nog ta en stund ^^

voigtann1Medlem sedan juni 20018 810 inlägg
#4

jag kör även en alert som skriver ut document.activeElement.id innan if-satsen, och i IE ser jag det rätta id't, men får en tom ruta i chrome.

Jag få ut element när jag har en focus på element och kör det jag kör 12.0.742.100 (PC).

Och kod exemplet du postade känns rätt så dålig då man måste se om webbläsaren har stöd för det eller inte och inte berätta vilket stöd den har.

@ndersMedlem sedan juni 200026 914 inlägg
#5

voigtann1 skrev:

Och kod exemplet du postade känns rätt så dålig då man måste se om webbläsaren har stöd för det eller inte och inte berätta vilket stöd den har.

Och dessutom: om document.all överhuvudtaget finns med i ett kodexempel finns det alltid bättre kodexempel.

SanjiMedlem sedan juli 2009356 inlägg
#6

voigtann1 skrev:

Jag få ut element när jag har en focus på element och kör det jag kör 12.0.742.100 (PC).

Och kod exemplet du postade känns rätt så dålig då man måste se om webbläsaren har stöd för det eller inte och inte berätta vilket stöd den har.

jag kör också 12.0.742.100 på min PC... jag ska gå igenom allt igen och se om jag kan hitta något fel... återkommer lite senare så får vi se om jag lyckats med din lösning ^^

Genererad på 507 ms · cache AV · v20260730165559-full.f96bc7eb