0

我尝试做 ajax 编辑 textarea。当我单击“编辑”按钮时,我得到带有要编辑的文本的 textarea,当保存 textarea 时消失并且编辑的文本
必须出现在

    jQuery('.photocont #commeditCont').animate({opacity: 0}, timer, function()
    {
        if (id == 'commedit') jQuery(this).html('<textarea>'+jQuery(this).html().replace(/<br>/gi,"\n")+'</textarea>');
        else if (id == 'commsave') {

            var link = window.location.protocol + '//' + window.location.host + 'picture_edit';

            jQuery.ajax({
                type: "POST",
                url: link,
                data: { image : image, description : jQuery(this).html(jQuery(this).find('textarea').val()) },
                dataType: "json",
                context: this,
                success: function(data) {
                    jQuery(this).html(jQuery(this).find('textarea').val().replace(/\n/g,"<br>"));
                },
                error:function (xhr){
                    if (xhr.status == 401) {
                        window.location.href = link;
                    }
                }
            });

        }
});

在 ajax 中,success: function我尝试从 textarea 获取文本并用新的 div 替换。不幸的是我收到错误

NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument

...a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?...

jquery....min.js (line 16)

TypeError: jQuery(this).find("textarea").val() is undefined 

jQuery(this).html(jQuery(this).find('textarea').val().replace(/\n/g,"<br>"));

错误来自控制台。

4

2 回答 2

0

this超出了成功函数的范围,因此未定义。尝试缓存这个并改用那个,如下所示:

jQuery('.photocont #commeditCont').animate({opacity: 0}, timer, function() {
    if ( id == 'commedit' ) {
        jQuery(this).html('<textarea>' + jQuery(this).html().replace(/<br>/gi, "\n") + '</textarea>');
    }
    else if ( id == 'commsave' ) {

        var link = window.location.protocol + '//' + window.location.host + 'picture_edit',
            self = this;

        jQuery.ajax({
            type    : "POST",
            url     : link,
            data    : { image: image, description: jQuery(this).html(jQuery(this).find('textarea').val()) },
            dataType: "json",
            context : this,
            success : function( data ) {
                jQuery(self).html(jQuery(self).find('textarea').val().replace(/\n/g, "<br>"));
            },
            error   : function( xhr ) {
                if ( xhr.status == 401 ) {
                    window.location.href = link;
                }
            }
        });

    }
});
于 2012-08-23T18:49:09.940 回答
0

看看你在这里做什么

description: jQuery(this).html(jQuery(this).find('textarea').val())

那是您要发送到服务器的内容吗?我想你想要文本

真正的问题是您的 this 在回调中的范围错误

           success: function(data) {
                jQuery(this).html(jQuery(this).find('textarea').val().replace(/\n/g,"<br>"));
            },

如果您不jQuery(this)一遍又一遍地继续使用,就不会有问题。您需要维护范围。

jQuery('.photocont #commeditCont').animate({
    opacity: 0
}, timer, function () {
    var div = jQuery(this);
    if (id == 'commedit') div.html('<textarea>' + div.html().replace(/<br>/gi, "\n") + '</textarea>');
    else if (id == 'commsave') {

        var link = window.location.protocol + '//' + window.location.host + 'picture_edit';

        jQuery.ajax({
            type: "POST",
            url: link,
            data: {
                image: image,
                description: div.html(jQuery(this).find('textarea').val()) //I still think this is not right
            },
            dataType: "json",
            context: this,
            success: function (data) {
                div.html(div.find('textarea').val().replace(/\n/g, "<br>"));
            },
            error: function (xhr) {
                if (xhr.status == 401) {
                    window.location.href = link;
                }
            }
        });

    }
});
于 2012-08-23T19:24:20.947 回答