2009-07-09 10 views
0

J'essaie d'émuler un simple contrôle utilisateur timepick avec une combo et une petite image d'une horloge. Dans le contrôle de l'utilisateur type I dans le code:Commandes utilisateur multiples avec Javascript

function SetFocus() { 
    var comboBox = $find("<%=cboTime.ClientID %>"); 
    var input = comboBox.get_inputDomElement(); 
    input.focus();  } 

cboTime est le contrôle ComboBox et il y a une image d'une petite horloge juste après Je me l'événement click de l'image à cette fonction

tous est bien et dandy si j'ai un contrôle utilisateur sur ma page .....

Si j'ajoute un autre contrôle utilisateur avec un nom différent, le comportement est tel que peu importe quelle image je clique, la dernière zone de liste déroulante obtient l'attention.

Je sais ce qui se passe ... J'ai juste besoin d'une solution de contournement. Lorsque la page est rendue, elle crée deux scripts identiques avec l'ID client de la zone de liste déroulante. Le problème est, toutes les instances précédentes écrase le prédécesseur, car ils sont le même nom.

Quelqu'un at-il une solution à cela? Ça doit être simple mais je ne trouve pas la réponse nulle part.

Merci

Répondre

1

Vous aurez besoin de changer la méthode SetFocus() pour qu'il prenne l'ID client du combobox comme paramètre:

function SetFocus(cboClientId) { 
    var comboBox = $find(cboClientId); 
    var input = comboBox.get_inputDomElement(); 
    input.focus(); 
} 

Cela signifie, vous devrez changer le code où l'appel de la méthode SetFocus() est effectué. Si je comprends bien, cela se fait dans un gestionnaire d'événements de clic côté client sur une image. Dans ce cas, vous pouvez définir la partie onclick="..." de l'image dans le code du contrôle. Par exemple. quelque chose comme ça (non testé):

ASCX:

<asp:DropDownList id="cboTime" .../> 
<asp:Image id="img" .../> 

code-behind:

img.Attributes.Add("onclick", 
    string.Format("javascript:SetFocus('{0}');", cboTime.ClientID)); 

Ensuite, vous pouvez prendre la méthode SetFocus() et le mettre dans un fichier JS externe (et inclure cela dans votre ASCX).

Questions connexes