在我的代码背后,我有 -
tbWhatIfBeginDate.Attributes.Add("onchange", "checkDates(" + tbWhatIfBeginDate.ClientID + ", " + tbWhatIfEndDate.ClientID + ")");
tbWhatIfEndDate.Attributes.Add("onchange", "checkDates(" + tbWhatIfBeginDate.ClientID + ", " + tbWhatIfEndDate.ClientID + ")");
这是我的javascript函数 -
function checkDates(BeginDateId, EndDateId) {
if (BeginDateId.value > EndDateId.value) {
var beginDt = new Date(BeginDateId.value);
var endDt = new Date(EndDateId.value);
var newDt = new Date(endDt.getTime() - (24 * 60 * 60 * 1000));
var y = newDt.getFullYear(),
m = newDt.getMonth() + 1, // january is month 0 in javascript
d = newDt.getDate();
BeginDateId.value = [pad(m), pad(d), y].join("/");
}
}
当我运行Visual Studio 2010时,它可以工作。
当我部署到测试服务器时,收到错误消息。 “对象预期 - 行:176,字符:1”
第176行是 - 输入名称=“ctl00 $ cpMain $ tbWhatIfBeginDate”type =“text”value =“8/1/2012”id =“ctl00_cpMain_tbWhatIfBeginDate”onchange =“checkDates(ctl00_cpMain_tbWhatIfBeginDate,ctl00_cpMain_tbWhatIfEndDate)”style =“width:70px;”
我没有看到错误。
想法?
答案 0 :(得分:2)
您正在将HTML元素的id传递给函数,它们是字符串,但您不带引号传递它,就好像它是一个已定义的变量一样。在onClick
范围内,没有已定义的此类变量ctl00_cpMain_tbWhatIfBeginDate
,因此您收到了javascript错误。这是预期的 - 你没有声明这样的变量。
在您的函数中,您会立即尝试将这些参数视为对象,但同样,您传入了undefined
,因为具有指定名称的变量不存在。他们也不应该!当您尝试按ID引用DOM节点时,必须使用getElementById
对象中的document
来“获取”相关对象。那么,ids只是字符串。
因此,您应该传递用引号括起来的字符串。为此,您需要修改添加事件的两行:
tbWhatIfBeginDate.Attributes.Add("onchange", "checkDates('" + tbWhatIfBeginDate.ClientID + "', '" + tbWhatIfEndDate.ClientID + "')");
tbWhatIfEndDate.Attributes.Add("onchange", "checkDates('" + tbWhatIfBeginDate.ClientID + "', '" + tbWhatIfEndDate.ClientID + "')");
这样,字符串id就会传递给你的函数。然后,需要修改您的函数以根据传递的ID获取DOM对象:
function checkDates(BeginDateId, EndDateId) {
beginDate = document.getElementById(BeginDateId);
endDate = document.getElementById(EndDateId);
if (!beginDate || !endDate)
return; // <--- add an error message here?
if (beginDate.value > endDate.value) {
var beginDt = new Date(beginDate.value);
var endDt = new Date(endDate.value);
// existing logic here
}
}
<强>文档强>
document.getElementById
- https://developer.mozilla.org/en/DOM/document.getElementById 答案 1 :(得分:0)
你是在Cassini服务器和2003年的盒子之间进行的吗? MS将控制命名更改为IIS 7 /最新版本的VS.我会检查控件的实际变量名在渲染的HTML中是什么。