目前,如果我在SharePoint项目中使用JavaScript,我会将代码添加到{。{1}}块中的* .ascx文件中,并为每个元素创建<script type="text/javascript"></script>
的变量。
例如:
ClientID
现在我想在我的项目中添加一个外部JavaScript并在那里插入代码。
但是我如何才能访问var test = '<%= TextBox1.ClientID %>';
?在外部JavaScript中,我无法使用ClientID
。我发现了这个:referencing server controls in external file但我不明白,这应该如何运作。如果有人可以解释我,如何访问ID,那将是非常棒的。
顺便说一下,为什么:
<%= TextBox1.ClientID %>
不起作用,不会显示任何消息?
格尔茨
修改1:
好的,我可以在外部脚本中使用textBox1吗? 我是这样做的,这是在我的* .ascx文件中:
<script type="text/javascript">
var ClientIDs = {
test1 : '<%= TextBox1.ClientID %>',
test2 : '<%= TextBox2.ClientID %>'
}
function SetButtonStatus() {
alert($(ClientIDs.test1).value);
}
</script>
在我的外部脚本中,我只有一个测试它的功能:
<script type="text/javascript">
var ClientIDs = {
textBox1: '<%= textBox1.ClientID %>',
textBox2: '<%= textBox2.ClientID %>'
}
</script>
我还用function test () {
alert($(ClientIDs.textBox1).val();
}
测试了它。每次执行test()时,都会出现以下错误:
"#" +
编辑2:
我错过了警报中的"document.getElementById(...)" is null or not an object
。但现在我收到一条消息,说明变量没有定义。
如果我使用:)
我只获取文本而不是我的控件的ID。
编辑3: 目前我使用:
$('#' + ClientIDs.SumbitSearch).val()
在我的* .ascx文件中,它有效。我不喜欢这种方式......它在外部JS中不起作用,引用不起作用。如果有人有其他想法,可以使用.net 3.5,如果他让我知道,那就太好了。
答案 0 :(得分:2)
要解释并简化您要链接的问题,他们所做的只是从页面/服务器控件设置JavaScript变量,并从外部JavaScript文件中读取该变量。
例如,您的* .ascx文件将包含此JavaScript:
var textBox1 = '<%= TextBox1.ClientID %>';
然后,您的外部JavaScript文件只能引用变量textBox1
。
现在,还有其他方法可以实现这一目标。如果您使用的是ASP.NET 4,则可以使用新属性ClientIDMode来阻止ASP.NET更改您的ID。如果你没有使用ASP.NET 4,也可以简单地将CSS类添加到你想要选择的元素,只需更改你的jQuery选择器以使用一个类(虽然比使用ID略慢)。
最后,在为元素id评估jQuery选择器时,您需要使用#
,这样就可以了:
alert($('#' + ClientIDs.test1).val());
答案 1 :(得分:1)
在ASP页面中:
<script>
var test2 = '<%= TextBox2.ClientID %>'
</script>
以这种方式在外部JavaScript访问TextBox2
中:
documnet.getelementByid(test2);
答案 2 :(得分:0)
我从来没有找到过我喜欢的解决方案,但我已经实施了一些不是完全可怕的解决办法:
也许其他SO'ers会有更优雅的解决方案来解决这个问题 - 我期待看到其他的回应。
答案 3 :(得分:0)
使用explicity全局参数。
window.clientId ='&lt;%= TextBox1.ClientID%&gt;';
这意味着你有gloabal变量“cilentId”。然后你可以在任何地方使用它。