1

我正在使用 asp.net、C#、jQuery 1.8.3/1.7.2

我想在页面加载时将脚本中的文本框“只读”属性更改为“真”或“假”。 *更新*文本框的值在运行时加载。这是脚本:

function hidebtn() {        
    $('#diviv').css({
        "display": "block"
    });

    $("#txtname").attr('ReadOnly', true);
}

如果我写一个警报,它工作正常,现在 div 看起来很好。txtname 属性没有改变。我从代码隐藏中调用此方法,如下所示:

Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function", "hidebtn();", true);
4

7 回答 7

1

你应该使用

  $("#txtname").prop('readonly', true); //lowercase

prop 是更好的选择。同样适用checked="checked"

属性和属性之间的区别在特定情况下可能很重要。在 jQuery 1.6 之前,.attr() 方法在检索某些属性时有时会考虑属性值,这可能会导致行为不一致。从 jQuery 1.6 开始,.prop() 方法提供了一种显式检索属性值的方法,而 .attr() 仅检索属性。

这都是关于HTML 属性与 DOM 属性的。

于 2013-01-03T12:36:30.637 回答
1

更改ReadOnlyreadonly

$("#txtname").attr('readonly', true);
于 2013-01-03T12:36:46.947 回答
1

试试这个

 $("#txtname").prop('readonly', true);

更新

$("#<%= txtname.ClientID %>").prop('readonly', true);
于 2013-01-03T12:37:16.010 回答
1

用这个

$("#<%= txtname.ClientID %>")

如下

$("#<%= txtname.ClientID %>").attr('ReadOnly', true);

全部一起

function hidebtn() {        
$('#diviv').css({
    "display": "block"
});

$("#<%= txtname.ClientID %>").attr('ReadOnly', true);
}

或将控件属性设置ReadOnlyFalse

于 2013-01-03T12:37:37.097 回答
0

您应该使用它来将输入更改为只读

$("#txtname").attr('readonly', 'readonly');
于 2013-01-03T12:37:33.390 回答
0

根据ClientScriptManager.RegisterStartupScript 文档,脚本块应在页面完成加载后但在页面OnLoad事件触发之前执行。

如果您碰巧在OnLoad事件中添加了文本框,那么选择器将永远不会看到找到控件。

无论哪种方式,您都应该检查您的控件在脚本运行时是否存在。
您可以通过执行以下操作来做到这一点:

console.log($("#txtname").length); //or
alert($("#txtname").length);

如果长度不是0,那么其他东西可能会覆盖您的readonly设置。可能在脚本运行或类似之后重新呈现控件。

如果长度是0那么您的控件尚未在页面上。

您可以尝试将代码包装在 a$(document).ready(function(){//yourcode here})中,看看它是否有所作为。

您可以改为使用 stringbuilder 来构建脚本,并使用Page.ClientScript.RegisterClientScriptBlock类似于以下内容:

StringBuilder hideBtnScript = new StringBuilder();

hideBtnScript.Append("<script type=\"text/javascript\">");
hideBtnScript.Append("$(document).ready(function() {");
hideBtnScript.Append("$('#diviv').css({'display': 'block'});");
hideBtnScript.Append("$('#txtname').prop('readonly', true);});");
hideBtnScript.Append("</script>");

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Call my function", hideBtnScript.ToString(), false);
于 2013-01-03T13:15:11.803 回答
0

由于一些渲染问题,似乎没有任何东西可以正常工作。所以我只是用启用/禁用文本框替换了 jQuery 和客户端脚本。

谢谢

于 2013-01-04T06:46:35.813 回答