asp.net webform中的Javascript“未定义错误”

时间:2011-03-15 03:44:43

标签: javascript asp.net

我不是javascript专家,但我之前使用过它,这个问题令我困惑。这是javascript:

function formatNumThousands(myNumber) {
    if (myNumber.length > 0) {
        var index = myNumber.indexOf(',');
        while (index != -1) {
             myNumber = myNumber.replace(',', '');
             index = myNumber.indexOf(',');
        }
        var myResult = '';
        for (var i = myNumber.length - 1; i >= 0; i--) {
            myResult = myNumber[i] + myResult;
            if ((myNumber.length - i) % 3 == 0 & i > 0) myResult = ',' + myResult;
        }
        document.getElementById('<%=txtMyNumber.ClientID%>').value = myResult;
     }
  }

在后面的代码中,我为此文本框的OnBlur事件设置了属性:

this.txtMyNumber.Attributes.Add("onblur", "formatNumThousands(this.value);");

我构建并发布应用程序,它在我的机器上运行良好。另外两个用户在文本框中“未定义”,无论他们做什么。

1 个答案:

答案 0 :(得分:0)

尝试这个修剪版本(see in jsfiddle)。看到我替换了[]方法的charAt()运算符,因为它是一种从字符串中提取单个字符的更保守的方法:

function formatNumThousands(editElement) {
    if (!editElement || editElement.value.length == 0)
        return;

    var myNumber = editElement.value.replace(/,/g, '');

    var myResult = '';
    for (var i = myNumber.length - 1; i >= 0; i--) {
        myResult = myNumber.charAt(i) + myResult;
        if ((myNumber.length - i) % 3 == 0 & i > 0)
            myResult = ',' + myResult;
    }

    editElement.value = myResult;
}

不要忘记将后面的代码更改为

// Notice that `.value´ is gone:
this.txtMyNumber.Attributes.Add("onblur", "formatNumThousands(this)");