在事件处理程序中使用时函数未定义

时间:2015-07-27 15:24:53

标签: javascript jquery

我试图在事件处理程序中使用一个函数,但它一直在说未定义。它在我的事件处理程序之外工作。

我尝试使用的函数叫做task_name()。我试图在updateTaskName()方法中使用它。

任何帮助都会非常感激。谢谢!

function task_name(task_id,category_id,task_name){

    var discussions_base_url = <?=json_encode(base_url().ProjCollabNav::$task_discussions);?>;
    var discussions_link = "<a href=" + discussions_base_url + "/" + task_id + "/" + category_id + ">" + task_name +
        "</a>";

    var updated_task = "<li class='tasks' data-task_id='"+task_id+"'>"+discussions_link+"</li>";


    return updated_task;


}





function updateTaskName(){

        $(document).on("click", ".save_task_name_changes", function () {


            var task_id = $(this).data("task_id");
            var category_id = $(this).data("category_id");
            var task_name  = $(".new_task_name_input[data-task_id='"+task_id+"']").val();

            /*Shows undefined*/
            task_name(task_id,category_id,task_name);

            $(".edit_mode[data-task_id='"+task_id+"']").replaceWith(updatedTaskName);


            return false;
        });



    }

2 个答案:

答案 0 :(得分:1)

您有两个名为task_name的变量。您定义的全局函数以及由以下内容定义的事件处理程序中的局部变量:

var task_name  = $(".new_task_name_input[data-task_id='"+task_id+"']").val();

局部变量“隐藏”全局变量。您应该将本地变量重命名为其他变量,然后更改呼叫。

var tname  = $(".new_task_name_input[data-task_id='"+task_id+"']").val();
task_name(task_id,category_id,tname);

答案 1 :(得分:0)

在updateTaskName()方法中声明task_name变量:

 var task_name  = $(".new_task_name_input[data-task_id='"+task_id+"']").val();

这个在全局环境中声明的shadow task_name()方法。