0

JavaScriptには約10から12の関数があります。制御、取得、フォーカス、およびそれらの関数で使用したその他の関数が発生した場合に、そのうちの2つまたは3つを呼び出したいと思います。

私は仮想キーパッドのこれらすべての機能を持っています...マスターページのように仮想キーパッドを追加したいと思います(私はすでにHTMLフォームを使用してJavaScriptで仮想キーパッドを作成しました)。

そのコードをマスターページにすでに追加していて、キーパッドは機能していますが、単純なHTMLコントロールでのみ機能します(つまり、runat = "server"属性がありません)。runat="server"を追加すると機能しません。

コンテンツまたは子ページからこの関数を呼び出す方法がわかりません。

私のコードは以下のとおりです:--(マスターページに追加したJavaScriptのこのコード...これはコードの一部です(完全ではありません))

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">

        function setId(el) {
            id = el;
            //alert(el);
            document.getElementById(id).focus();
            reset();
            return 0;
        }  

        function restoreCode(evt) {
            ButtonUp(kcode);
        }

        function writeKeyPressed(evt) {
            InsertChar('k', kcode);

            return false;
        };

        function InsertChar(mode, c) {
            document.getElementById(id).focus();
        }

        function ButtonDown(c) {
            reset();
        }

        function ButtonUp(c) {
            //codes
            resets();
        }

        function Shift() {
            //codes
        }
    </script>

コードに属性を持たないHTMLコントロールであるコンテンツページから呼び出すと、機能します。runat="server"

 <input id="txt_pwd" type="password" onfocus="setId('txt_pwd');" />

コンテンツページ(つまりrunat="server"、コードに属性を持つASPコントロール)から呼び出すと、機能しません。

<input id="txt_pwd" type="password" onfocus="setId('txt_pwd');" runat="server" />

コンテンツページからサーバー側の制御を使用して(マスターページにある)関数を呼び出すソリューションを誰かに教えてもらえますか?

4

1 に答える 1

1

runat="server".NETはコントロールのIDを変更するため、使用すると機能しません。そのため、このrunat="server"場合、JavaScriptは間違ったIDを探しています。これを修正する1つの方法は、 ClientIDModeを使用してIDを変更しないように.NETに指示することです。

<input id="txt_pwd" type="password" clientidmode="Static" onfocus="setId('txt_pwd');" runat="server" />

静的モードを使用しない場合、リピーターで使用したくない場合、またはIDが重複している可能性がある場合は、生成されたClientIDを取得する他の方法があります。その場合、次のように.ClientIDを使用できます。

document.getElementById('<%= txt_pwd.ClientID %>');

ClientIDでの読み取り

より簡単なアプローチは、使用onfocus="setId(this);"してから使用することです。

function setId(el) {
    id = el.id;
于 2013-03-27T13:59:25.430 に答える