如何在外部JavaScript中从ServerControl访问ClientID
目前,如果我在SharePoint项目中使用JavaScript,我会在如何在外部JavaScript中从ServerControl访问ClientID,javascript,asp.net,controls,external,clientid,Javascript,Asp.net,Controls,External,Clientid,目前,如果我在SharePoint项目中使用JavaScript,我会在块中将代码添加到*.ascx文件中,并为每个元素创建一个ClientID变量 例如: var test = '<%= TextBox1.ClientID %>'; 不工作,不会显示任何消息 格里茨 编辑1: 好的,我可以在外部脚本中使用textBox1吗? 我是这样做的,这在我的*.ascx文件中: <script type="text/javascript"> var ClientIDs
块中将代码添加到*.ascx文件中,并为每个元素创建一个ClientID
变量
例如:
var test = '<%= TextBox1.ClientID %>';
不工作,不会显示任何消息
格里茨
编辑1:
好的,我可以在外部脚本中使用textBox1吗?
我是这样做的,这在我的*.ascx文件中:
<script type="text/javascript">
var ClientIDs = {
textBox1: '<%= textBox1.ClientID %>',
textBox2: '<%= textBox2.ClientID %>'
}
</script>
我还用“#”+
对它进行了测试。每次执行test()时,都会出现以下错误:
"document.getElementById(...)" is null or not an object
编辑2:
我在警报中错过了一个)
。但是现在我得到一条消息,变量没有定义。
如果我使用:$('#'+clientId.SumbitSearch).val()
我只获取文本,而不是控件的ID
编辑3:
目前我使用:
<script type="text/javascript">
var ClientIDs = {
test1 : '<%= TextBox1.ClientID %>',
test2 : '<%= TextBox2.ClientID %>'
}
function test() {
alert($('#' + ClientIDs.test1).attr("id")));
}
</script>
变量clientId={
测试1:“”,
测试2:“”
}
功能测试(){
警报($('#'+clientId.test1.attr(“id”));
}
在我的*.ascx文件中,它可以工作。我不喜欢那样。。。它在外部JS中不起作用,引用也不起作用。如果有人有其他想法,可以使用.net 3.5,如果他让我知道,那就太好了。为了解释和简化您链接到的问题,他们所做的只是从页面/服务器控件设置一个JavaScript变量,然后从外部JavaScript文件读取该变量 例如,*.ascx文件将包含以下JavaScript:
var textBox1 = '<%= TextBox1.ClientID %>';
为了解释和简化您链接到的问题,他们所做的只是从页面/服务器控件设置一个JavaScript变量,并从外部JavaScript文件读取该变量 例如,*.ascx文件将包含以下JavaScript:
var textBox1 = '<%= TextBox1.ClientID %>';
我从来没有找到一个我喜欢的解决方案,但我已经实施了一些并非完全可怕的解决方案:
- 对于必须引用特定页面元素的JS代码,请在.aspx文件中定义它,以便访问。这些函数可以调用.js文件中的常用重载函数
- 在.aspx文件中定义javascript变量以保存ClientID值。js文件中的函数可以引用这些变量来获取客户端ID。当然,这些函数只能在定义预期变量的页面上正常工作
也许其他SO'ER会有更优雅的解决方案来解决这个问题-我期待看到其他的回应。我从未找到一个我喜欢的解决方案,但我已经实施了一些并非完全可怕的解决方案:
- 对于必须引用特定页面元素的JS代码,请在.aspx文件中定义它,以便访问。这些函数可以调用.js文件中的常用重载函数
- 在.aspx文件中定义javascript变量以保存ClientID值。js文件中的函数可以引用这些变量来获取客户端ID。当然,这些函数只能在定义预期变量的页面上正常工作
也许其他SO'ER会有更优雅的解决方案来解决这个问题-我期待看到其他的回应。使用explicity全局参数 window.clientId=''
这意味着您有global变量“cilentId”。然后您可以在任何地方使用它。使用显式全局参数 window.clientId='' 这意味着您有global变量“cilentId”。然后您可以在任何地方使用它。在ASP页面中:
<script>
var test2 = '<%= TextBox2.ClientID %>'
</script>
在ASP页面中:
<script>
var test2 = '<%= TextBox2.ClientID %>'
</script>
没错。我也没有找到解决办法,这很好。Greetz.如果一个页面上没有多个用户控件实例,最优雅的解决方案是在web.config文件的
节点中设置clientmode=“Static”
。这是在ASP.NET4中引入的。没错。我也没有找到解决办法,这很好。Greetz.如果一个页面上没有多个用户控件实例,最优雅的解决方案是在web.config文件的
节点中设置clientmode=“Static”
。这是在ASP.NET 4中引入的。请参阅我的编辑1:。谢谢你的回答。更新了jQuery选择器,我的完全错了。另外,方法是val()
而不是values
.Upvote for ClientIDMode-我已经忘记了这一点。它解决了.JS/ClientID问题。当然,它还增加了一个问题,即每个控件/页面负责确保其元素的唯一命名。的确,使用clientmode=“Static”
会迫使您提前进行一些思考/双重检查。但是,对于只有一个控件实例的情况,从CSS/JS的角度来看,它要好得多。但现在我要休息一下。如果一切顺利,我明天会给你反馈。Greetz。请参见我的编辑1:。谢谢你的回答。更新了jQuery选择器,我的完全错了。另外,方法是val()
而不是values
.Upvote for ClientIDMode-我已经忘记了这一点。它解决了.JS/ClientID问题。当然,它还增加了一个问题,即每个控件/页面负责确保其元素的唯一命名。的确,使用clientmode=“Static”
会迫使您提前进行一些思考/双重检查。但是,对于只有一个控件实例的情况,从CSS/JS的角度来看,它要好得多。但现在我要休息一下。如果一切顺利,我明天会给你反馈。我会避免在ASCX文件中定义JS变量:一个页面可能包含多个控件(或同一控件的多个实例)。如果每个控件都定义了“var clientid”,它们就会相互冲突(该死的JS全局命名空间!)。如果你
<script>
var test2 = '<%= TextBox2.ClientID %>'
</script>
documnet.getelementByid(test2);