0

私は ajax edit 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;
                    }
                }
            });

        }
});

ajaxsuccess: 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

ここで何をしているのか見てください

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

それはあなたがサーバーに送りたいものですか?私はあなたがテキストが欲しかったと思います

本当の問題は、これがコールバックの間違ったスコープにあるという事実です

           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 に答える
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 に答える