首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从外部ClientID中的ServerControl访问JavaScript

如何从外部ClientID中的ServerControl访问JavaScript
EN

Stack Overflow用户
提问于 2011-10-24 13:56:29
回答 4查看 7K关注 0票数 1

目前,如果在我的JavaScript项目中使用SharePoint,我会将代码添加到*.ascx文件中的<script type="text/javascript"></script>块中,并为每个元素创建一个ClientID变量。

例如:

代码语言:javascript
复制
var test = '<%= TextBox1.ClientID %>';

现在,我想向我的项目中添加一个外部JavaScript,并在那里插入代码。但是我怎样才能进入ClientID呢?在外部JavaScript中,我不能使用<%= TextBox1.ClientID %>。我发现了这个:在外部文件中引用服务器控件,但我不明白,这应该如何工作。如果有人能解释我的,如何访问ids,那就太棒了。

顺便问一下,为什么:

代码语言:javascript
复制
<script type="text/javascript">
    var ClientIDs = {
        test1   : '<%= TextBox1.ClientID %>',
        test2   : '<%= TextBox2.ClientID %>'
        }

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

如果不起作用,就不会显示任何信息?

格列茨

编辑1:

好吧,我可以在我的外部脚本中使用textBox1吗?我是这样做的,这是在我的*.ascx文件中:

代码语言:javascript
复制
<script type="text/javascript">
    var ClientIDs = {
        textBox1:    '<%= textBox1.ClientID %>',
        textBox2:    '<%= textBox2.ClientID %>'
    }
</script>

在我的外部脚本中,我只有一个函数来测试它:

代码语言:javascript
复制
function test () {
alert($(ClientIDs.textBox1).val();
}

我还用"#" +测试了它。每次执行test()时,我都会得到以下错误:

代码语言:javascript
复制
"document.getElementById(...)" is null or not an object

编辑2:,我在警报中漏掉了一个)。但是现在我收到一条消息,即变量没有定义。如果我使用:$('#' + ClientIDs.SumbitSearch).val(),我只得到文本,而不是我的控件的ID。

编辑3:在我现在使用:

代码语言:javascript
复制
<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工作,这将是很好的,如果他让我知道。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-24 14:04:11

为了解释并简化链接到的问题,他们所做的就是从页面/服务器控件中设置一个JavaScript变量,并从外部JavaScript文件中读取该变量。

例如,您的*.ascx文件将包含以下JavaScript:

代码语言:javascript
复制
var textBox1 = '<%= TextBox1.ClientID %>';

然后,您的外部JavaScript文件可以只引用变量textBox1

现在,还有其他方法来实现这一点。如果使用的是ASP.NET 4,则可以使用新的属性ClientIDMode来防止ASP.NET更改If。如果不使用ASP.NET 4,也可以简单地向要选择的元素中添加一个CSS类,只需将jQuery选择器更改为使用类(不过比使用ID稍微慢一些)。

最后,在计算元素id的#选择器时,需要使用jQuery,所以这样做是可行的:

代码语言:javascript
复制
alert($('#' + ClientIDs.test1).val());
票数 3
EN

Stack Overflow用户

发布于 2012-08-27 06:46:06

在ASP页面中:

代码语言:javascript
复制
<script>
    var test2 = '<%= TextBox2.ClientID %>'
</script> 

在外部JavaScript access TextBox2中,采用这种方式:

代码语言:javascript
复制
documnet.getelementByid(test2);
票数 1
EN

Stack Overflow用户

发布于 2011-10-24 14:05:02

我从来没有找到过一个我喜欢的解决方案,但是我实现了一些工作--这些工作并不完全是可怕的:

  • 对于必须引用特定页面元素的JS代码,在.aspx文件中定义它,这样您就可以访问<%= btnFoo.ClientID %>。这些函数可以调用.js文件中常见的繁重函数。
  • 在.aspx文件中定义javascript变量以保存ClientID值。.js文件中的函数可以引用这些变量来获取客户端ID。当然,这些函数只能在定义预期变量的页面上正确工作。

也许其他人会对这个问题有更好的解决方案--我期待着看到其他的回应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7876751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档