正确调用JQuery方法

时间:2014-02-16 01:00:58

标签: javascript jquery

我在jQuery对象中有一个方法,如下所示:

formatPhone: function(phone){
    return  phone.substring(0,3) +  "." + phone.substring(3,6) + "." + phone.substring(6,10);
}

在THAT SAME对象中,我这样称呼它:

"<h4>" + this.formatPhone(item.MainPhone) + "</h4>"

我得到“TypeError:'undefined'不是函数(评估'this.formatPhone(item.MainPhone)')

我控制台记录了物品对象,而MainPhone肯定有值。

是不是我说的不正确???

感谢任何帮助。

- 更新 - 这是完整的app.js文件

var home = {
    init: function(){
        // Just some styling
        $('.ms-core-sideNavBox-removeLeftMargin').css('display', 'none');
        $('#contentBox').css('margin-left', '0' );

        // Get List Items via AJAX
        this.getAllNews();
        this.getAllEvents();
        this.getAllLinks();

        // Event Handlers
        $('#btnGoHome').on('click', this.showHome);
        $('#btnFindCorp').on('click', this.showProperty);
        $('#btnFindProp').on('click', this.showOther);
        $('#prop_search').on('focus', this.getAllProps);

        $('#property_addressbook').on('click', '.tblPropListed', this.getSingleProperty);

    },

    //methods
    showProperty: function(){
        $('#main_content').hide();
        $('#pageTitle').append("&nbsp;--&nbsp;Property Addressbook");
        $('#property_content').show();
    },

    showHome: function(){
        $('#other_content').hide();
        $('#main_content').show();
    },

    getAllNews: function(){
        $.ajax({
            url: "/_api/web/lists/GetByTitle('Latest News')/items?$orderby=ID desc",
            type: "GET",
            headers: { "accept" : "application/json;odata=verbose" },
            dataType: 'json',
            success: function(data){
                $.each(data.d.results, function(index, item){
                    var addinfo = "";
                    if( item.Additional_x0020_Info ){
                        addinfo = "<a class='lnkAnnounce' target='_blank' href='" + item.Additional_x0020_Info.Url  + "'>See More ...</a>";
                    } // end if

                    $('#news_listing').append(
                        "<div id='listitem-" + item.ID + "' class='announce_container'>" + 
                        "<table style='width:100%;'><tr><td style='width:20%;' valign='top' align='center'>" + 
                        "<img src='/SiteAssets/" + item.TaxonomyId + ".png' />" + 
                        "</td><td style='width:80%;'>" + 
                        "<h1 class='announce_title'>" + item.Title + "</h1><hr>" + 
                        "<span class='announce_body'>" + item.Body +"</span>" + 
                        addinfo + "</td></tr></table></div>"
                    );
                });
            },
            error: function(request, errorType, errorMessage){
                console.log('Error: ' + errorType + ' with message: ' + errorMessage);
            }
        });
    },

    getAllEvents: function(){
        $.ajax({
            url: "/_api/web/lists/GetByTitle('Corporate Calendar')/items?select=ID,Title,Taxonomy/Title,Event_x0020_Date&$orderby=Event_x0020_Date asc",
            type: "GET",
            headers: { "accept" : "application/json;odata=verbose" },
            dataType: 'json',
            success: function(data){
                $.each(data.d.results, function(index, item){
                    var monthname=new Array("January","February","March","April","May","June","July","August","September","October","November","December");

                    var calDate = item.Event_x0020_Date;
                    var dt = new Date(calDate);
                    var today = new Date();

                    var day = dt.getDate();
                    var month = monthname[dt.getMonth()];
                    var year = dt.getFullYear();

                    if( today < dt ){
                        $('#event_listing').append( 
                            "<div id='listitem-" + item.ID + "' class='cal_container'>" + 
                            "<table style='width:100%;'><tr><td style='width:20%;' valign='top' align='center'>" + 
                            "<img src='/SiteAssets/" + item.TaxonomyId + ".png' />" +
                            "</td><td style='width:80%;'>" + 
                            "<span class='cal_date'>" + month + ' ' + day + ', ' + year + "</span>" + 
                            "<hr><span class='cal_title'>" + item.Title + "</span>" + 
                            "<br><br></td></tr></table></div>"
                        );
                    } // end if
                });
            },
            error: function(request, errorType, errorMessage){
                console.log('Error: ' + errorType + ' with message: ' + errorMessage);
            }
        });
    },

    getAllLinks: function(){
        $.ajax({
            url: "/_api/web/lists/GetByTitle('Important Links')/items",
            type: "GET",
            headers: { "accept" : "application/json;odata=verbose" },
            dataType: 'json',
            success: function(data){
                $.each(data.d.results, function(index, item){
                    $('#link_listing').append( "<li><a target='_blank' href='" + item.URL.Url  + "'>" + item.URL.Description + "</a></li>" );
                    //remove target='_blank' from Paid Holidays
                    $('#edr_links').find('a:contains("Paid Holidays")').attr("target", "");
                });
            },
            error: function(request, errorType, errorMessage){
                console.log('Error: ' + errorType + ' with message: ' + errorMessage);
            }
        });
    },

    getAllProps: function(){
        $.ajax({
            url: "/msd/_api/web/lists/GetByTitle('Communities')/items?$orderby=PropNumber asc",
            type: "GET",
            headers: { "accept" : "application/json;odata=verbose" },
            dataType: 'json',
            success: function(data){
                $.each(data.d.results, function(index, item){
                    if( !item.MainPhone ){ item.MainPhone = "9012592500"; }
                    $("#prop_show").append(
                        "<tr class='tblPropListed' style='width:100%' data-prp='" + item.PropNumber +  "' data-prop='" + item.Title + "'>" + 
                        "<td style='width:5%;' valign='middle' class='prplspropnum'>" + item.PropNumber + "</td>" + 
                        "<td valign='top' style='width:95%;border:2px solid #CCC;'><span class='prplstitle'>" + item.Title + "</span><br>" + 
                        "<span class='prplslocation'>" + item.City + ", " + item.State + "</span>" + 
                        "<span class='prplsphone'>" 
                        + item.MainPhone.substring(0,3) +  "." + item.MainPhone.substring(3,6) + "." + item.MainPhone.substring(6,10) +
                        "</span></td>" + 
                        "</tr>"
                    );
                });
                $('#prop_search').keyup(function(){
                    var fldval = $(this).val();
                    fldval = fldval.toLowerCase();
                    if( fldval == ''){
                        $(".tblPropListed").each(function(index){ $(this).show(); });
                    } // end if

                    $(".tblPropListed").each(function(index){
                        var prp = $(this).data('prp') + $(this).data('prop');
                        prp = prp.toLowerCase();
                        if(prp.indexOf(fldval) === -1){
                            $(this).hide();
                        } else {
                            $(this).show();
                        } // end if
                    });
                });
            },
            error: function(request, errorType, errorMessage){
                console.log('Error: ' + errorType + ' with message: ' + errorMessage);
            }
        });
    },

    hideAllProps: function(){
        $("#prop_show").html("");
    },

    getSingleProperty: function(){
        var prp = $(this).data('prp');
        var prpPix = prp;
        var ulh = ["210", "217", "222", "258"];
        if(ulh.indexOf(prp) !== -1){
            prpPix = "400";
        } // end if
        $("#prop_show").html(""); 
        $("#prop_search").val("");
        $('#main_content').hide();
        $('#pageTitle').append("&nbsp;--&nbsp;Property Addressbook");
        $('#property_content').show();

        $.ajax({
            url: "/msd/_api/web/lists/GetByTitle('Communities')/items?$filter=PropNumber eq " + prpPix,
            type: "GET",
            headers: { "accept" : "application/json;odata=verbose" },
            dataType: 'json',
            success: function(data){
                $.each(data.d.results, function(index, item){
                    console.log(item);
                    $('#property_left').append(
                        "<p style='text-align:center;'>" + 
                        "<img src='http://www.edrpo.com/edrAssets/propsP/" + item.PropNumber + "/homeRotator/01.jpg' width='650px' height='auto' />" + 
                        "</p>" + 
                         "<h1>" + item.Title + "</h1>"   + 
                         "<h3>" + item.Address + "<br>" + item.City + ", " + item.State + " " + item.Zip + "</h3>" + 
                         "<h4>901.259.2500</h4>" + 
                         //"<h4>" + this.formatPhone(item.MainPhone) + "</h4>" + 
                         "<p><a href='" + item.WebSite + "'>website</a>" + 
                         "<br><br><hr>" + 
                         "<table style='width:100%;'><tr><td style='width:30%;'>Community Manager</td><td style='width:35%;'><b>" + 
                         item._x0061_c55 + 
                         "</b></td><td style='width:20%;'>" + 
                         item.rens + 
                         "</td><td style='width:15%;'>" + 
                         item.j0nk + 
                         "</td><tr><tr><td style='width:30%;'>ACM</td><td style='width:35%;'><b>" + 
                         item.khml + 
                         "</b></td><td style='width:20%;'>" + 
                         item.ifur + 
                         "</td><td style='width:15%;'>" + 
                         item.q9up + 
                         "</td><tr><tr><td style='width:30%;'>ACM2</td><td style='width:35%;'><b>" + 
                         item._x0041_CM2 + 
                         "</b></td><td style='width:20%;'>" + 
                         item.ACM2_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.ACM2_x0020_VOIP + 
                         "</td><tr><tr><td style='width:30%;'>LMM</td><td style='width:35%;'><b>" + 
                         item._x006b_vj7 + 
                         "</b></td><td style='width:20%;'>" + 
                         item._x006f_si0 + 
                         "</td><td style='width:15%;'>" + 
                         item.rnhw + 
                         "</td><tr><tr><td style='width:30%;'>LP</td><td style='width:35%;'><b>" + 
                         item.LP + 
                         "</b></td><td style='width:20%;'>" + 
                         item.LP_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.LP_x0020_VOIP + 
                         "</td><tr><tr><td style='width:30%;'>RLM</td><td style='width:35%;'><b>" + 
                         item.RLM + 
                         "</b></td><td style='width:20%;'>" + 
                         item.RLM_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.RLM_x0020_VOIP + 
                          "</td><tr><tr><td style='width:30%;'>RLC</td><td style='width:35%;'><b>" + 
                         item.RLC + 
                         "</b></td><td style='width:20%;'>" + 
                         item.RLC_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.RLC_x0020_VOIP + 
                          "</td><tr><tr><td style='width:30%;'>RLC2</td><td style='width:35%;'><b>" + 
                         item._x0052_LC2 + 
                         "</b></td><td style='width:20%;'>" + 
                         item.RLC2_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.RLC2_x0020_VOIP + 
                          "</td><tr><tr><td style='width:30%;'>RSM</td><td style='width:35%;'><b>" + 
                         item.RSM + 
                         "</b></td><td style='width:20%;'>" + 
                         item.RSM_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.RSM_x0020_VOIP + 
                          "</td><tr><tr><td style='width:30%;'>Maintenance Manager</td><td style='width:35%;'><b>" + 
                          item.MM + 
                         "</b></td><td style='width:20%;'>" + 
                           item.MM_x0020_Direct + 
                         "</td><td style='width:15%;'>" + 
                         item.MM_x0020_VOIP + 
                         "</td><tr><table>"     
                    );
                });
            },
            error: function(request, errorType, errorMessage){
                console.log('Error: ' + errorType + ' with message: ' + errorMessage);
            }   
        });
    },

    formatPhone: function(phone){
        return  phone.substring(0,3) +  "." + phone.substring(3,6) + "." + phone.substring(6,10);
    }
};

$(document).ready( function(){
    home.init();
});

1 个答案:

答案 0 :(得分:1)

您应该将其称为:yourObjectname.formatPhone(),而不是this 例如,请参阅以下代码:

var yourObjectname = {
    formatPhone: function(phone){
      return phone;
    },
    anotherFunction: function(){
      alert(this.formatPhone('555'));
    }
}
yourObjectname.anotherFunction();
// or
alert(yourObjectname.formatPhone('555'));

您可以看到this只能在特定对象内使用,但在外面您应该拨打yourObjectname