1

これは私のコードです(ブックマークレットです)

    javascript:(function(){
    a=document.createElement('script');
    a.setAttribute('src','//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js');
    document.body.appendChild(a);
    data='[["#txtapplicantlname","agrawal","text"],["#txtapplicantfname","aayush","text"],["#txtfather","Ranjan","text"],["#txtmother","Neelam","text"],["#txtPincode","452010","text"],["#txtPhone","2147483647","text"],["#txtEmail","aayush@mail.com","text"]]';
    for(a=$.parseJSON(data),b=a.length-1;0<=b;b--){
        c=a[b];
        if (c[2] == 'text') {
            console.log(c);
            $(c[0]).val(c[1]);
    }
    }
})();

ifステートメントを挿入するまでは正常に機能していましたが、その後壊れました。コンソールにエラーは表示されません。JavaScript の文字列比較エラーをグーグルで検索しましたが、何も役に立ちませんでした。

equalsandを使用しようcompareToとしましたが、コンソールエラーが発生し、何も機能しませんでした。

Uncaught TypeError: Cannot call method 'equals' of undefined fillform.php:1

Uncaught TypeError: Cannot call method 'compareTo' of undefined 

ヘルプは大歓迎です。

if注: 変数は、最初に Google クロージャー コンパイラでコンパイルされ、ステートメントが編集されているため、そのような名前が付けられています。

4

1 に答える 1

1

このコードにはいくつか問題があります。文字列比較はその 1 つではありません。

1) 非同期に読み込まれたスクリプトが完了するのを待っていません。が利用できないため、このコードはほぼ常に失敗するはず$.parseJSON()です。実際、その問題を修正すると、このコードはうまく機能します。

    (function(){
        a=document.createElement('script');
        a.setAttribute('src','//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js');

        var afterJqueryLoad = function() {
            data='[["#txtapplicantlname","agrawal","text"],["#txtapplicantfname","aayush","text"],["#txtfather","Ranjan","text"],["#txtmother","Neelam","text"],["#txtPincode","452010","text"],["#txtPhone","2147483647","text"],["#txtEmail","aayush@mail.com","text"]]';
            for(a=$.parseJSON(data),b=a.length-1;0<=b;b--){
                c=a[b];
                if (c[2] == 'text') {
                    console.log(c);
                    $(c[0]).val(c[1]);
                }
            }
        };

        var jqueryReady = false;
        a.onreadystatechange= function () {
            if((this.readyState == 'complete' || this.readyState == 'loaded') && !jqueryReady) {
                jqueryReady = true;
                afterJqueryLoad();
            }
        };

        a.onload = function() {
            if(!jqueryReady) {
                jqueryReady = true;
                afterJqueryLoad();
            }
        };
        document.body.appendChild(a);
    })();

2) より適切な var 名を使用します (a、b、および c は適切な var 名ではありません)。

3)var変数を正しくスコープするために使用します。現在、コードはグローバルをシャドーイングし、同じスコープ内であっても変数を踏みつけています。aたとえば、var はスクリプトの elem var を踏みにじるでしょう。((2) に従って var 名を変更する必要がありますが、使用varはオプションではありません。var を正しくスコープするには、常にこれを行う必要があります。)

4) 読みやすくするためにスペースを使用します。スペースがないため、for行が不必要に読みにくくなっています。

すべて一緒に:

(function(){
    var jqueryScriptElem = document.createElement('script');
    jqueryScriptElem.setAttribute('src', '//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js');

    var afterJqueryLoad = function() {
        var data = '[["#txtapplicantlname","agrawal","text"],["#txtapplicantfname","aayush","text"],["#txtfather","Ranjan","text"],["#txtmother","Neelam","text"],["#txtPincode","452010","text"],["#txtPhone","2147483647","text"],["#txtEmail","aayush@mail.com","text"]]',
            dataParsed = $.parseJSON(data);
        for(var dataItemIndex = dataParsed.length - 1; 0 <= dataItemIndex; dataItemIndex--) {
            var dataItem = dataParsed[dataItemIndex];
            if (dataItem[2] == 'text') {
                console.log(dataItem);
                $(dataItem[0]).val(dataItem[1]);
            }
        }
    };

    var jqueryReady = false;
    jqueryScriptElem.onreadystatechange = function () {
        if((this.readyState == 'complete' || this.readyState == 'loaded') && !jqueryReady) {
            jqueryReady = true;
            afterJqueryLoad();
        }
    };

    jqueryScriptElem.onload = function() {
        if(!jqueryReady) {
            jqueryReady = true;
            afterJqueryLoad();
        }
    };
    document.body.appendChild(jqueryScriptElem);
})();
于 2013-05-13T07:19:52.823 に答える