我使用jQuery的尝试,并触发一种方法时的一个 ASP.NET (2.0)拉列表中的更改事件处理由的!问题是,下列表的内部位于内即使在那时,只有当用户已决定编辑一行内。

我想我把它捡的对象使用ASP码块,但问题是,在页首先加载的"编辑"指标的排不存在和它抛出一个错误。把方块里面 IF 声明还不能工作。

$(document).ready(function() //when DOM is ready, run containing code
{
    <% if (grvTimeSheets.EditIndex > -1) {%>
        $(#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>).change(function() {
             $(#<%= grvTimeSheets.ClientID %>).block({ message: null }
        });
}
);
<% } %>

这是一次尝试我做了,我还试图把如果声明ASP代码之外的JavaScript块。它不工作。

我怎么可以申请延事件下降落箱?理想情况下尽量精简。


谢谢你的回答,但不,这没工作:(.JavaScript code似乎并没有被输出...令人困惑...

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //When DOM is ready, run the containing code
    {

    }
    );
</script>

是的输出。即使这是code:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //when DOM is ready, run containing code
    {<% if (grvTimeSheets.EditIndex > -1) {%>
        var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
        $(id).change(function() {
             $(id).block({ message: null }
        });
     <% } %>
    }
    );
</script>

它这样做之前,驾驶我的疯狂。


对不起,你能不能使那个稍微更加清晰。我想确定整个事情在后面的代码就像这样:

DropDownList ddl (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    $(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
          csm.RegisterStartupScript(cstype, csname1, script, true);
}

是,你是什么意思?

顺便说一句,上述没有工作。没有错误的,只是没有事件的工作。

有帮助吗?

解决方案

几件事情在这里。

  1. 你需要把你的选择器的报价,当您通过他们的 $() 功能。代码段上产生喜欢的东西 $(#some-generated-id), ,这不会的工作。
  2. 关闭大括号服务器侧如果声明以外的onready功能。它需要被套在相同的级别开幕。

试试这个:

$(document).ready(function() //when DOM is ready, run containing code
{
  <% if (grvTimeSheets.EditIndex > -1) {%>
      var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
      $(id).change(function() { 
           $(id).block({ message: null }
        }); 
 <% } %>
}
);

如果它不工作,继续和粘贴所产生的javascript。

其他提示

使用这样的:

cs.RegisterClientScriptBlock(cstype, csname, cstext2.ToString(), False)

它是假的,没有创造的剧本标签,因为你是包括他们。MSDN文件是错误的,在如何解释的标志。

还有,只是把客户身份证件的控制成独立的变量从背后的代码,不是的 jQuery 代码。

然后使用的变量包含的id,而不是在。.

在你的脚本块,你创建在后面的代码:

string script = @"<script type=text/javascript> var myControlId = '" + ddl.ClientId  "';") + "</script>"

我没有验证这种语法,但应接近。你可以添加的额外的语法 grvTimeSheets.ClientID 你自己。如果你得到这工作那么你可能希望改变它建立一个JavaScript阵列和储存ClientId的那样,然后你只有一个全球JavaScript变量需要的工作。

另一个选择是只是得到你想寻找一个类名称,说明其行为。然后你。非常清楚的:

$(function() {
    $("select.yourMarkerClass").change(....);
});

如果没有行编辑,然后这种代码不起作用。如果有一个要素相匹配的选择,你会得到新的行为增加。

如果你不使用相同的ID其他地方上的页面,可以阻止 ASP.NET's UniqueID一个备先进的选择:

$('[id$=ddlClients]')

这比赛只有结束id string而不是整体。铭记,如果控制是本多次在不同行,这将符合所有的实例。

看看 选择 更多的例子。

我用的 页。ClientScript 财产注册一个脚本块,以包含任何身份证,我需要访问的!

这里的一个例子是我的JavaScript在一个外部文件:

var myFancySelector = '#' + myControlId;
selectedValue = $(myFancySelector).val();

myControlId定义从背后的代码和注册在ClientScriptBlock.

钥匙可以是任何东西你想要的,它应该是独特的。

我会试着更多的后的周末。这是代码,但:

DropDownList ddl = (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    jQuery(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
    csm.RegisterStartupScript(cstype, csname1, script, false);

因为你已经拉在各行。每拉将有一个独特的ClientId,因此我建议做些什么Ben建议和使用该类选择,因为它是最简单的解决方案。

或者你可以创建一个JavaScript功能上你的编辑击,然后得到独特的客户id拉在这行就是正在编辑中。

对不起,我应该已经读过你的代码接近。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top