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语句之前它曾经工作正常,然后它就坏了。控制台没有给我任何错误,我在 google 上搜索了很多 javascript 字符串比较错误,但没有发现任何有用的信息。

我尝试使用equalscompareTo以控制台错误告终,但没有任何效果。

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

Uncaught TypeError: Cannot call method 'compareTo' of undefined 

高度赞赏帮助。

注意:变量命名是有原因的,它最初是用谷歌闭包编译器编译的,并且if正在编辑语句。

4

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 名称,但 usingvar不是可选的;您必须始终这样做才能正确地确定 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 回答