jQuery attr无法正常工作

时间:2013-01-03 12:35:01

标签: c# jquery asp.net

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

我想在页面加载时将脚本中的文本框“Readonly”属性更改为“true”或“false”。 *已更新 *文本框的值在运行时加载.. 这是脚本:

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

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

如果我写了一个警报,它工作正常,现在div显得很好。 txtname属性未更改。我从代码隐藏这样调用这个方法:

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

7 个答案:

答案 0 :(得分:1)

你应该使用

  $("#txtname").prop('readonly', true); //lowercase
道具是一个更好的选择。同样适用于checked="checked"

  

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

所有关于 HTML属性与DOM属性。

答案 1 :(得分:1)

ReadOnly更改为readonly

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

答案 2 :(得分:1)

试试这个

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

<强>更新

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

答案 3 :(得分:1)

使用此

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

如下

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

一起

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

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

或将控件属性ReadOnly设置为False

答案 4 :(得分:0)

您应该将此用于更改输入为readonly

$("#txtname").attr('readonly', 'readonly');

答案 5 :(得分:0)

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

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

无论哪种方式,您都应该在脚本运行时检查您的控件是否存在 你可以通过执行:

来做到这一点
console.log($("#txtname").length); //or
alert($("#txtname").length);

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

如果长度为0,则您的控件尚未显示在页面上。

您可以尝试将代码包装在$(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);

答案 6 :(得分:0)

由于一些渲染问题,似乎没有什么工作正常。所以我只是用启用/禁用文本框替换了jQuery和Client脚本。

由于