TypeError:'undefined'不是函数(评估'i.replace(et,“&lt; $ 1&gt; <! - $ 2 - >”)')

时间:2013-06-19 02:14:24

标签: jquery

奇怪的是,我找不到这个问题的答案,但是,我收到了这个错误:

TypeError: 'undefined' is not a function (evaluating 'i.replace(et,"<$1></$2>")')

它似乎来自这行代码(我不得不煞费苦心地评论每行代码才能找到它):

$.post("include/ajax.php", {updateWorkArt:"1", title:title, height:height, width:width, medium:medium, type:type, id:id, left:fin, top:top}, function(data){},"json");

以下是完整代码:

$(document).on("click", "#updateWorkPopup", function(){
        var title = $("#updateWorkTitle").val();
        var height = $("#updateWorkHeight").val();
        var width = $("#updateWorkWidth").val();
        var medium = $("#updateWorkMedium").val();
        var type = $("#updateWorkAssetType").val();

        var id = $("#whiteBgPopup").attr("data-workid");

        if($.trim(title) != "" && $.trim(height) != "" && $.trim(width) != "" && $.trim(medium) != "" && $.trim(type) != "")
        {
            var left = parseInt($("#offsetContainer").position().left);

            var containerMid = parseInt($(window).width()/2);

            var fin = (-containerMid+left)*-1;

            var top = parseInt($("#wall").height()/2);

            $.post("include/ajax.php", {updateWorkArt:"1", title:title, height:height, width:width, medium:medium, type:type, id:id, left:fin, top:top}, function(data){
                if(data.success)
                {   
                    $("#popUp").fadeOut("slow", function(){
                        $("#popUp").find("input").each(function(){
                            $(this).val("").blur();
                        });

                        $("#wall").append("<div class='adjustArtwork' data-workid='" + id + "' style='left:" + fin + "px; top:" + top + "px;' ><img src='" + data.image + "' width='" + data.width + "' /></div>", function(){
                            alert("finished");
                        });
                    });
                }
                alert("yes!");
            },"json");
        }
    });

这个错误究竟意味着什么?

2 个答案:

答案 0 :(得分:0)

这意味着(很可能)您的变量i引用了一个没有名为replace的属性的对象。

当你要求

i.replace

JavaScript查找了i的值并发现它是一个对象;然后查找了它的replace属性并找不到它,因此返回undefined

然后它尝试将i.replace作为函数调用,但“undefined不是函数”。

i.replace的值实际上也可能是值undefined(虽然这很少见,只是为了完整性而添加)。

在任何一种情况下,代码

i.replace(et,"<$1></$2>")

仅在i.replace的值为函数时才有效。

答案 1 :(得分:0)

我发现了问题。

.append()似乎没有回调函数并导致错误,因为它是undefined

幸运的是,.append()是同步的,所以我的代码将按照它的编写顺序加载;不需要function()