1

現時点では、SharePoint プロジェクトで JavaScript を使用する場合、コードを *.ascx ファイルに<script type="text/javascript"></script>ブロックで追加し、要素ごとにClientID.

例えば:

var test = '<%= TextBox1.ClientID %>';

ここで、プロジェクトに外部 JavaScript を追加し、そこにコードを挿入したいと考えています。しかし、どうすればにアクセスできますClientIDか? 外部 JavaScript では使用できません<%= TextBox1.ClientID %>。私はこれを見つけました:外​​部ファイルでサーバーコントロールを参照していますが、これがどのように機能するかわかりません。誰かが私のIDにアクセスする方法を説明できれば、それは素晴らしいことです。

ところで、なぜこれが:

<script type="text/javascript">
    var ClientIDs = {
        test1   : '<%= TextBox1.ClientID %>',
        test2   : '<%= TextBox2.ClientID %>'
        }

    function SetButtonStatus() {    
            alert($(ClientIDs.test1).value);
        }
</script>

動作しません。メッセージは表示されませんか?

グリーツ

編集1:

わかりました、外部スクリプトで textBox1 を使用できますか? 私はこのようにしました。これは私の *.ascx ファイルにあります:

<script type="text/javascript">
    var ClientIDs = {
        textBox1:    '<%= textBox1.ClientID %>',
        textBox2:    '<%= textBox2.ClientID %>'
    }
</script>

私の外部スクリプトには、それをテストするための関数しかありません:

function test () {
alert($(ClientIDs.textBox1).val();
}

私もそれをテストしました"#" +。test() が実行されるたびに、次のエラーが発生します。

"document.getElementById(...)" is null or not an object

編集 2:)アラートで a を見逃しました。しかし、変数が定義されていないというメッセージが表示されます。使用する場合:$('#' + ClientIDs.SumbitSearch).val()コントロールの ID ではなく、テキストを取得するだけです。

編集3: 現在私が使用している:

<script type="text/javascript">
    var ClientIDs = {
        test1 :    '<%= TextBox1.ClientID %>',
        test2 :    '<%= TextBox2.ClientID %>'
    }

    function test() {
       alert($('#' + ClientIDs.test1).attr("id")));
    }
</script>

私の *.ascx ファイルでは、動作します。私はその方法が好きではありません...外部JSでは機能しません。参照は機能しません。誰かが.net 3.5で動作する他のアイデアを持っている場合は、彼が私に知らせてくれればうれしいです.

4

4 に答える 4

3

リンク先の質問を説明し、単純化するために、ページ/サーバー コントロールから JavaScript 変数を設定し、その変数を外部 JavaScript ファイルから読み取るだけです。

たとえば、*.ascx ファイルには次の JavaScript が含まれます。

var textBox1 = '<%= TextBox1.ClientID %>';

次に、外部 JavaScript ファイルは変数を参照するだけですtextBox1

さて、これを達成する他の方法があります。ASP.NET 4 を使用している場合は、新しいプロパティClientIDModeを使用して、ASP.NET が ID を変更しないようにすることができます。ASP.NET 4 を使用していない場合は、選択する要素に CSS クラスを追加し、jQuery セレクターをクラスを使用するように変更することもできます (ただし、ID を使用するよりも少し遅くなります)。

最後に、要素 ID の jQuery セレクターを評価するときに を使用する必要がある#ため、これは機能します。

alert($('#' + ClientIDs.test1).val());
于 2011-10-24T14:04:11.543 に答える
1

ASPページ:

<script>
    var test2 = '<%= TextBox2.ClientID %>'
</script> 

そして、TextBox2この方法での外部JavaScriptアクセスでは:

documnet.getelementByid(test2);
于 2012-08-27T06:46:06.240 に答える
0

明示的なグローバル パラメータを使用します。

window.clientId= '<%= TextBox1.ClientID %>';

これは、グローバル変数「cilentId」があることを意味します。そして、どこでも使用できます。

于 2011-10-25T12:06:44.843 に答える
0

私はこれに対する解決策を見つけたことがありませんが、完全に恐ろしいものではないいくつかの回避策を実装しました:

  • 特定のページ要素を参照する必要がある JS コードについては、.aspx ファイルで定義して、<%= btnFoo.ClientID %> にアクセスできるようにします。これらの関数は、.js ファイル内の一般的な負荷のかかる関数を呼び出すことができます。
  • .aspx ファイルで JavaScript 変数を定義して、ClientID 値を保持します。.js ファイル内の関数は、これらの変数を参照してクライアント ID を取得できます。もちろん、これらの関数は、予期される変数を定義するページでのみ正しく機能します。

おそらく、他の SO'er はこの問題に対してより洗練された解決策を持っているでしょう - 私は他の回答を見ることを楽しみにしています.

于 2011-10-24T14:05:02.823 に答える