Javascript字符串比较不起作用,搜索了很多?

时间:2013-05-13 06:45:36

标签: javascript jquery

这是我的代码(它是书签)

    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 

非常感谢帮助。

注意:变量的名称是这样的,原因是它最初使用Google闭包编译器进行编译,并且正在编辑if语句。

1 个答案:

答案 0 :(得分: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不是可选的;您必须始终执行此操作以正确调整变量范围。)

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);
})();