Iam new @ jquery - 这几乎适用于所有版本的IE,除了IE9它说“错误:'f'未定义”我不知道为什么?如果不建议像这样给出功能名称那么我该怎么办?
$(document).ready(function f(txtName)
{
$("#ctl00_Content_chkBox" + txtName).click(function ()
{
var thisCheck = $(this);
if (thisCheck.is(':checked'))
{
var myDate = new Date();
var displayDate =
(myDate.getMonth() + 1) + '/' + (myDate.getDate()) + '/' + myDate.getFullYear();
$(this).next(".textbox1").val(displayDate);
}
});
});
<input type="checkbox" ID="chkBoxName" runat="server" onclick="f('Name');" />
<asp:TextBox CssClass="textbox1" PreValue="" runat="Server" ID="txt_comp_name_date_v" Required="false" Enabled="False" />
答案 0 :(得分:3)
您正在将命名函数表达式传递给$(document).ready
。以前版本的Internet Explorer有一个错误,它将该功能暴露给周围的范围。看来Internet Explorer 9修复了您依赖的这个错误。使用函数声明而不是命名函数表达式,方法是不将其传递给$(document).ready
:
function f(txtName) {
$("#ctl00_Content_chkBox" + txtName).click(function () {
var thisCheck = $(this);
if (thisCheck.is(':checked')) {
var myDate = new Date();
var displayDate = (myDate.getMonth() + 1) + '/' + (myDate.getDate()) + '/' + myDate.getFullYear();
$(this).next(".textbox1").val(displayDate);
}
});
}
答案 1 :(得分:2)
您只能将$(document).ready()
与您希望在初始化时运行的代码一起使用。您不要将它用于以后要运行的命名函数。你看起来好像用同样的代码做了两件事。
我建议像这样更改你的代码。我已删除该功能上的名称,并从您引用它的HTML中删除了onclick=f()
,因为您也不需要。现在,有一个点击处理程序在$(document).ready()
中运行,它为您连接点击处理函数(不再需要onclick="f()"
)。然后,点击处理程序的代码执行剩下的工作。
$(document).ready(function() {
$("#chkBoxName").click(function () {
var thisCheck = $(this);
if (thisCheck.is(':checked')) {
var myDate = new Date();
var displayDate = (myDate.getMonth() + 1) + '/' + (myDate.getDate()) + '/' + myDate.getFullYear();
thisCheck.next(".textbox1").val(displayDate);
}
});
});
<input type="checkbox" ID="chkBoxName" runat="server" />
<asp:TextBox CssClass="textbox1" PreValue="" runat="Server" ID="txt_comp_name_date_v" Required="false" Enabled="False" />
你可以在这里看到它:http://jsfiddle.net/jfriend00/9y7sC/。
您应该对代码thisCheck.next(".textbox1")
的这一部分非常小心,因为这对于查找文本字段非常挑剔。如果您在两者之间放置任何介入的HTML标记,它将无法工作 - 它必须是下一个HTML标记,并且必须具有正确的类。
如果文本字段旁边有很多复选框,并且你希望它们都能获得这个函数,那么只需给它们所有相同的类名,并在jQuery代码中引用该类,如下所示:
$(document).ready(function() {
$(".dateCheckbox").click(function () {
var thisCheck = $(this);
if (thisCheck.is(':checked')) {
var myDate = new Date();
var displayDate = (myDate.getMonth() + 1) + '/' + (myDate.getDate()) + '/' + myDate.getFullYear();
thisCheck.next(".textbox1").val(displayDate);
}
});
});
<input type="checkbox" class="dateCheckbox" runat="server" />
<asp:TextBox CssClass="textbox1" PreValue="" runat="Server" ID="txt_comp_name_date_v" Required="false" Enabled="False" />
以下是使用一段代码处理多个复选框的示例:http://jsfiddle.net/jfriend00/twu5n/