Javascript 使用onChange事件并发送两个对象作为参数会使我无法定义

Javascript 使用onChange事件并发送两个对象作为参数会使我无法定义,javascript,asp.net,Javascript,Asp.net,我做了一个简单的函数,根据从dropdownlist中选择的项目的文本,textbox将更改其maxlength属性 function cambiarLength(drop, textbox) { var option = document.getElementById(drop); var texto = option.options[option.selectedIndex].text; var field = document.getElementById(text

我做了一个简单的函数,根据从dropdownlist中选择的项目的文本,textbox将更改其maxlength属性

function cambiarLength(drop, textbox) {
    var option = document.getElementById(drop);
    var texto = option.options[option.selectedIndex].text;
    var field = document.getElementById(textbox);
    if (texto == 'RUC') {
        field.maxLength = 3;
    }
    else {
        field.maxLength = 6;
    }
};
代码隐藏:

TipoDoc.Attributes.Add("onChange", "javascript: cambiarLength(this, txtDoc);");
错误:

0x800a1391 - JavaScript runtime error: 'txtDoc' is undefined

如果
txtDoc
是字段的文本id,则需要将其视为字符串。您还应该删除
javascript:
前缀,因为这将不允许在例程中识别

TipoDoc.Attributes.Add("onChange", "cambiarLength(this, 'txtDoc');");
有关
javascript:
前缀的使用,请参见此处:

更新

如果您使用的是WebForms,那么您将需要使用
ClientID
,例如,如果
txtDoc
实际上是您的代码隐藏控件,您应该执行以下操作:

TipoDoc.Attributes.Add("onChange", "cambiarLength(this, '" + txtDoc.ClientID +"');");

txtDoc是在哪里定义的?txtDoc是我用于该文本框的id。您应该使用:
this.id
。示例:
TipoDoc.Attributes.Add(“onChange”,“javascript:cambiarLength(this,this.id);”
第一个选项有效,但当我执行var option=document.getElementById(drop)时;选项没有得到drop,而只是null。请在引号中尝试<代码>document.getElementById(“drop”)ct100\u MainContent\u txtDoc,等等,在这种情况下,您需要使用
.ClientID
属性。如果可能,我想在传递“this”时问一下这个问题它正在传递调用函数的对象,是否有方法传递对象txtDoc而不是传递clientID?
将引用调用方法的对象。在这种情况下;将txtDoc作为DOMElement传递的唯一方法是这样做(我不建议这样做)
cambiarLength(这是document.getElementbyId(“+txtDoc.ClientID+”)好的,明白了。非常感谢你的帮助!