0

jquery キーパッドのソースについては、ここをクリックしてください。

プロジェクトでこのキーパッドを別のフォームで使用しましたが、動作しますが、マスター ページを使用して別のフォームで同じものを使用すると、動作しません。私のマスターページでは、必要な参照がすべて追加されています(念のため、フォームのヘッド部分にも同じ参照が追加されています!)

<script src="../App_Themes/Default/js/jquery-1.6.1.js" type="text/javascript"></script>

<%--<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>--%>

<script src="../App_Themes/Default/js/jquery.keypad.js" type="text/javascript">    </script>

<script type="text/javascript">
$(function () {
$('#txtFTP').keypad();

});
</script> 

同じフォームのマスターページ参照を削除し、コンテンツ プレースホルダーを HTML タグに置き換えても、jquery キーボードは機能します。

なぜそれが機能しないのか、誰かが私に提案できますか?

更新 1

この問題についてさらにテストするために、新しいテスト マスターページを作成しました。コード:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="TestMasterPage.master.cs" 

 Inherits="Member_TestMasterPage" %>

<!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 runat="server">
 <title>Untitled Page</title>
 <asp:ContentPlaceHolder id="head" runat="server">
 </asp:ContentPlaceHolder>
</head>
<body>
 <form id="form1" runat="server">
  <div>
    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

    </asp:ContentPlaceHolder>
  </div>
 </form>
</body>
</html>

ご覧のとおり、jquery のマスター ページには参照がありません。

次に、新しい test.aspx ページを作成しました。コード:

<%@ Page Language="C#" MasterPageFile="~/Member/TestMasterPage.master" 

AutoEventWireup="true" CodeFile="2.aspx.cs" Inherits="_2" %>

<asp:Content ContentPlaceHolderID="head" runat="server">
 <script src="../App_Themes/Default/js/jquery-1.6.1.js" type="text/javascript"> 
 </script>

 <script src="../App_Themes/Default/js/jquery.keypad.js" type="text/javascript">
 </script>

 <script type="text/javascript">
   $(function () {
$('#txtFTP').keypad();

   });
 </script>
</asp:Content>

<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
 <div>
  <asp:TextBox ID="txtFTP" SkinID="Mini" runat="server" TextMode="Password"   
  ForeColor="Gray" />
 </div>
</form>

</asp:Content>

しかし、jquery キーボードは機能しません。しかし、マスターページの参照を削除し、それに応じてページを変更すると、キーボードが機能します! コード:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="2.aspx.cs" Inherits="_2" %>

<!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 runat="server">
<title>Untitled Page</title>

<script src="../App_Themes/Default/js/jquery-1.6.1.js" type="text/javascript"></script>

<script src="../App_Themes/Default/js/jquery.keypad.js" type="text/javascript">  
</script>

<script type="text/javascript">
$(function () {
$('#txtFTP').keypad();

});
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtFTP" SkinID="Mini" runat="server" TextMode="Password"  
ForeColor="Gray" />
</div>
</form>
</body>
</html>

私は何を間違っていますか?マスター ページで動作させられないのはなぜですか?

4

1 に答える 1

2

スクリプトの src パスが常に機能するとは限りません。これらは、ページがルート フォルダー内のフォルダーにある場合にのみ機能しますが、既にルートにいる場合、またはそれ以上のルートにある場合は機能しません。

マスター ページのメカニズムは、問題をより複雑にします。マスター ページを使用しない場合、リンクが機能するかどうかを確認するのは難しくありません。ページ パスが src 値で問題ないかどうかを確認する必要があります。たとえば、ここでは、ページが 1 つのフォルダーにある場合に機能します。ただし、マスター ページにアクセスすると、リンクはマスター ページではなくページに対して相対的に機能するため、マスター ページを作成するときに、ツリー内のどこにいるかはわかりません。

そのための解決策は、次のようにサーバーの助けを借りてルートからリンクを指定することです。

<script runat="server" src="~/App_Themes/Default/js/jquery-1.6.1.js" type="text/javascript"></script>

(「App_Themes」フォルダーはルートフォルダーにある必要があります)

于 2012-09-09T11:52:48.567 に答える