IE9的jquery函数未定义

时间:2011-09-26 06:06:56

标签: jquery function internet-explorer-9 undefined

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"  />

2 个答案:

答案 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/