2009-07-09 12 views
0

私は、コンボボックスと時計の小さな画像を使って簡単なタイムピックユーザーコントロールをエミュレートしようとしています。JavaScriptを使用した複数のユーザーコントロール

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

cboTimeは、ComboBoxコントロールであると私は

すべてこの関数に画像のクリックイベントを結びつける右 後少し時計のイメージがあります:ユーザーコントロールでは、私は、コードを入力します私のページ上で1つのユーザーコントロールを持っていればいいです.....

別のユーザーコントロールを別の名前で追加すると、どの画像をクリックしても、最後のコンボボックスフォーカスを取得します。

私は何が起こっているのか知っています...私は回避策が必要です。 ページがレンダリングされるとき、コンボボックスのクライアントIDを持つ2つの同一のスクリプトが作成されます。問題は、前のすべてのインスタンスが前のインスタンスを上書きするのは、それらが同じ名前であるためです。

誰でも解決できますか?そのシンプルになる必要がありますが、私はどこでも答えを見つけることができません。それはパラメータとしてコンボボックスのクライアントIDをとるようにあなたがSetFocus()方法を変更する必要があります

おかげ

答えて

1

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

この手段、あなたはどこのコードを変更する必要がありますSetFocus()メソッドの呼び出しが行われます。私が正しく理解していれば、これは画像上のクライアントサイドクリックイベントハンドラで行われます。その場合、コントロールのコード内の画像の一部をonclick="..."に設定することができます。例えば。このような何か(テストしていません):

ASCX:

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

コードビハインド:

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

は、その後、あなたがSetFocus()方法を取ると、外部JSファイルにそれを置く(および含めることができますあなたのASCXのそれ)。

関連する問題