我可以´;t运行Javascript代码

本文关键字:运行 Javascript 代码 #180 我可以 | 更新日期: 2023-09-27 18:27:28

编辑问题就在底部!!

我想让我的自动完成功能发挥作用,我总是得到这个:

无法修改Controls集合,因为控件包含代码块(即<%…%>)。描述:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误以及错误在代码中的来源的更多信息。

我的脚本和html代码:

<head runat="server">
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <title><%--<%= Page.Title %> --%>- Ticketsystem</title>
  <link href="~/Content/master.css" rel="stylesheet" type="text/css" />
  <asp:PlaceHolder runat="server">
    <%: Scripts.Render( "~/bundles/modernizr") %>
  </asp:PlaceHolder>
  <webopt:bundlereference runat="server" path="~/Content/css" />
  <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />

   <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.js"></script>


<script type="text/javascript" lang="ja">
    $(function ()
    {
       $('#tbCompany').autocomplete(
           {
               source: function (request, response)
               {
               $.ajax({
                   url: "Autocomlete.asmx/GetCompanyNames",
                   data: "{ 'searchTerm': '" + request.term + "' }",
                   type: "POST",
                   dataType: "json",
                   contentType: "application/json;charset=utf-8",
                   success: function (result) {
                       response(result.d);
                   },
                   error: function (result) {
                       alert('There is a problem processing your request');
                   }
               });
           },
           minLength: 0
       });
   });
</script>
</asp:PlaceHolder>
  
</head>
<body>
  <form runat="server">
<asp:TextBox ID="tbCompany" runat="server" Style="margin-top:10px" ClientIDMode="static"></asp:TextBox>

我不知道我的剧本是错了还是少了什么。我试着把它放在页面的末尾,放在div或占位符中,就像其他问题建议的那样。

编辑:现在我几乎按照你的建议做了所有的事情,现在它看起来像上面和下面的错误。

错误:

未捕获类型错误:$(…)。自动完成不是函数

我可以´;t运行Javascript代码

如您所见:https://support.microsoft.com/en-us/kb/976112内联表达式CCD_ 1不存在。

尝试将<%: ... %>更改为<%= ... %>

您还加载了两次jquery。您的jquery UI版本是1.10.3,但您正在加载版本jquery-1.9.1.js

尝试加载这些版本:

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.11.4/themes/ui-lightness/jquery-ui.css">

您需要将脚本放置在占位符标记中。

 <asp:PlaceHolder runat="server">
<script type="text/javascript" lang="ja">
    $(function() {
      $("#<%=tbCompany.ClientID%>").autocomplete({
        source: function(request, response) {
          $.ajax({
            url: "Autocomlete.asmx/GetCompanyNames",
            data: "{ 'searchTerm': '" + request.term + "' }",
            type: "POST",
            dataType: "json",
            contentType: "application/json;charset=utf-8",
            success: function(result) {
              response(result.d);
            },
            error: function(result) {
              alert('There is a problem processing your request');
            }
          });
        },
        minLength: 0
      });
    });
  </script>
</asp:PlaceHolder>

编辑:最近的错误似乎是因为缺少jQuery UI js或序列不正确。你能删除所有与jQuery相关的js文件,并在代码中添加最新版本的jQuery UI吗?

头中似乎添加了太多jQuery文件,尝试只使用一个jQuery,它可能会解决这个问题

您只能使用最新版本的缩小文件。

您正在加载Jquery ui吗。{version}.js,因为我在您的代码中看不到它是用于自动完成错误的。

如果您在seprate js文件中编写代码,则<%%>将不起作用,取而代之的是,您可以使用ClientIDMode作为静态语法,也可以使用作为aspx语法

$("#tbCompany")

希望它能起作用。

尝试<%# tbCompany.ClientID %>而不是<%=tbCompany.ClientID%>

<script type="text/javascript" lang="ja">
    $(function() {
      $("#<%# tbCompany.ClientID %>").autocomplete({
        source: function(request, response) {
          $.ajax({
            url: "Autocomlete.asmx/GetCompanyNames",
            data: "{ 'searchTerm': '" + request.term + "' }",
            type: "POST",
            dataType: "json",
            contentType: "application/json;charset=utf-8",
            success: function(result) {
              response(result.d);
            },
            error: function(result) {
              alert('There is a problem processing your request');
            }
          });
        },
        minLength: 0
      });
    });
  </script>

你介意试着把"#<%=tbCompany.ClientID%>"使用变量?作为:<%=字符串值=tbCompany.ClientID%>和:$("#value")。。。。也许"自动完成"不是重点。

在注释中,您使用的是.net 4.5。

.net 4购买了对asp.net控件的一些更改。特别是一个称为ClientIDMode 的属性

这允许您控制ASP.Net如何呈现和重命名控件的ID。你现在可以告诉.net别管他们了。。

您可以更改此项:

$('#<%=tbCompany.ClientID%>').autocomplete({...

对此:

<%:0

在ID为tbCompany的元素上添加属性ClientIDMode="static",这将告诉.net不要使用ID,而是使用您设置的任何内容。

点击此处查看有关ClientIDMode的更多信息