Javascript runat=";服务器";中断我的jQuery-数据采集器
runat=“server”正在破坏我的jquery。我有两个输入,但为了测试目的,只在其中一个中添加了runat=“server”。事实上,我需要把两者都加上 下面可以找到触发datetimepicker的JS脚本: 注意:dateTo已设置runat=“server”,并试图更改JS获取其ID的方式,但仍然无法工作Javascript runat=";服务器";中断我的jQuery-数据采集器,javascript,asp.net,runatserver,Javascript,Asp.net,Runatserver,runat=“server”正在破坏我的jquery。我有两个输入,但为了测试目的,只在其中一个中添加了runat=“server”。事实上,我需要把两者都加上 下面可以找到触发datetimepicker的JS脚本: 注意:dateTo已设置runat=“server”,并试图更改JS获取其ID的方式,但仍然无法工作 <script> $(function(){ $("#dateFrom").datetimepicker();
<script>
$(function(){
$("#dateFrom").datetimepicker();
$("#<%=dateTo%>").datetimepicker();
});
</script>
$(函数(){
$(“#dateFrom”).datetimepicker();
$(“#”)datetimepicker();
});
在这里,您可以使用runat=“server”或不在asp.net代码中找到HTML输入
<tr>
<td>
<input type="text" id="dateFrom" name="dateFrom" value="" class="dateFrom" />
</td>
<td >
<input type="text" id="dateTo" name="dateTo" runat="server" value="" class="dateTo" />
</td>
</tr>
有人知道吗,暗示。。。。。?
谢谢ASP.NET将在添加
runat=server
时将输入视为服务器端控件,这将导致这些输入的转换标识符以容器前缀开头(类似于ctl00
),从而“破坏”jQuery选择器
如果您使用的是.NET4,那么可以通过更改。否则,您将需要在选择器中包含前缀,或者重构选择器,使其独立于ID,并通过其他方式进行选择。ASP.NET将在添加
runat=server
时将输入视为服务器端控件,这将导致这些输入的转换标识符,以便它们以容器前缀开头(类似于ctl00
),从而“破坏”jQuery选择器
如果您使用的是.NET4,那么可以通过更改。否则,您将需要在选择器中包含前缀,或者重构选择器,使其独立于ID,并通过其他方式进行选择。使用
ClientID
获取服务器端控件生成的ID
:
$("#<%=dateTo.ClientID%>").datetimepicker();
$(“#”)datetimepicker();
ASP.NET将生成一个特定的
id
属性,该属性与服务器端控件的id
属性不同,因此您需要使用生成的值才能从jQuery访问它。使用ClientID
获取服务器端控件生成的id
:
$("#<%=dateTo.ClientID%>").datetimepicker();
$(“#”)datetimepicker();
ASP.NET将生成一个特定的
id
属性,该属性不同于服务器端控件的id
属性,因此您需要使用生成的值才能从jQuery访问它。使用该属性为服务器控件获取正确的客户端id
$('[id$=dateTo]').datetimepicker();
使用此选项可获取服务器控件的正确客户端id
$('[id$=dateTo]').datetimepicker();
既然您提供了类名,我建议只使用它们
$(function(){
$(".dateTo, .dateFrom").datetimepicker();
});
或者,您可以为表单上的任何“日期”字段指定一个“日期”类,并使用该类:
$(function(){
$(".date").datetimepicker();
});
这是客户端验证的常见模式,还允许您通过CSS样式提供上下文线索 既然您提供了类名,我建议只使用它们
$(function(){
$(".dateTo, .dateFrom").datetimepicker();
});
或者,您可以为表单上的任何“日期”字段指定一个“日期”类,并使用该类:
$(function(){
$(".date").datetimepicker();
});
这是客户端验证的常见模式,还允许您通过CSS样式提供上下文线索 如果您使用的是.NET 4,则可以将
clientdmode
属性设置为Static
。这将防止框架更改元素的ID:
<input type="text" id="dateTo" name="dateTo" runat="server"
ClientIDMode="Static" class="dateTo" value="" />
如果您使用的是.NET 4,则可以将
clientdmode
属性设置为Static
。这将防止框架更改元素的ID:
<input type="text" id="dateTo" name="dateTo" runat="server"
ClientIDMode="Static" class="dateTo" value="" />
这给分离资源和将客户端脚本与页面内容绑定带来了真正的麻烦(请参阅:丑陋),尽管您可以开始以这种格式将参数传递给函数等,但仍然如此。@Grant-True。webforms漏洞抽象的一部分:(的确!这是一个‘整洁’的把戏,但越快消失越好。“虽然我们提供了一种向开发人员提供客户端ID的方法,但随着客户端脚本的增长,这个解决方案已经成了一种骇客。”@Grant-我完全同意,但是对于那些使用webforms并希望使用客户端脚本操作服务器端控件的人来说,没有那么多其他选项(我想每个控件都可以指定一个唯一的类名,但这更令人讨厌)。是的,没有更多的“但是”我的意见:在这种情况下,这对于OP来说是一个可信的答案。这给分离资源和将客户端脚本与页面内容联系起来带来了真正的麻烦(请参阅:丑陋),尽管您可以开始以这种格式将参数传递给函数等,但仍然。@Grant-True。webforms的泄漏抽象的一部分:(的确!这是一个‘整洁’的把戏,但越快消失越好。“虽然我们提供了一种向开发人员提供客户端ID的方法,但随着客户端脚本的增长,这个解决方案已经变得有点黑客味了。”@Grant-我完全同意,但是对于那些使用webforms并希望使用客户端脚本操作服务器端控件的人来说,没有那么多其他选项(我想每个控件都可以指定一个唯一的类名,但这更令人讨厌)。是的,没有更多的“但是”来自我:在这种情况下,这是OP的可靠答案。很酷,我不知道这一点!@DaveBaghdanov-True,但是在您的示例中,生成的ID仍然不太可能是dateTo
。这只是意味着它不太可能动态更改,以防您将客户端ID硬编码到.js
文件中。很酷,我没有要知道这一点!@DaveBaghdanov-True,但是在您的示例中,生成的ID仍然不太可能是dateTo
。这意味着它不太可能动态更改,以防您将客户端ID硬编码到.js
文件中。