Пользовательская функция редактирования jqgrid не определена - PullRequest
1 голос
/ 21 мая 2011

Я только что начал играть с jqgrid, и у меня возникла странная проблема?

Я скопировал пример пользовательского редактирования с демо-сайта jqgrid и добавил дополнительную кнопку

мой код:

gridComplete: function(){ 
            var ids = jQuery("#rowed2").jqGrid('getDataIDs'); 
            for(var i=0;i < ids.length;i++){ var cl = ids[i]; 
                be = "<input style='height:22px;width:20px;' type='button' value='E' onclick=\"jQuery('#rowed2').editRow('"+cl+"');\" />"; 
                se = "<input style='height:22px;width:20px;' type='button' value='S' onclick=\"jQuery('#rowed2').saveRow('"+cl+"');\" />"; 
                ce = "<input style='height:22px;width:20px;' type='button' value='C' onclick=\"jQuery('#rowed2').restoreRow('"+cl+"');\" />";
                gc = "<input style='height:22px;width:20px;' type='button' value='G' onclick=\"geocodeMe("+cl+");\" />";
                jQuery("#rowed2").jqGrid('setRowData',ids[i],{Actions:be+se+ce+gc}); 
            } 
        }

когда я нажимаю кнопку с надписью G, я должен хотя бы вызвать мою функцию

, но я получаю ошибку js, что geocodeMe не определен в моем коде, поэтому не знаю, почему он не может найти ее.угадываете проблему объема, есть идеи как это исправить ???

функция geocodeMe:

function geocodeMe(myID) {
        // set default region
        region = 'uk';
        // address not empty
        removemarkers();
        $('#geo_detail').html('<label>Geocoding address...</label>');
        // lookup the address
        var myData = $("#rowed2").getRowData(myID);
        address = myData.geoaddr_mdt;
        geocoder.geocode( {'address':address,'region':region}, function(results, status) {
            // if the address was found
            if(status == google.maps.GeocoderStatus.OK) {
                $str = '<label>Geocode Successful<br> Lattitude: '+results[0].geometry.location.lat()+' Longitude: '+results[0].geometry.location.lng()+'<br> The address is displayed below and will be stored in the database.<br> If the address is incorrect you may edit it before saving the location to the database.<br>If the marker is in the wrong location you may drag it to where you  believe it should be.</label>';
                $('#geo_detail').html($str);
                // insert lat/long into form
                $('#lat').val(results[0].geometry.location.lat());
                $('#lng').val(results[0].geometry.location.lng());
                // create new lat/long object
                latlng = new google.maps.LatLng(results[0].geometry.location.lat(),results[0].geometry.location.lng());
                $('#disp_addr').val(address);
                $('#form_buttons').show();
                $('#detail_address').show();
                //reverselookup(results[0].geometry.location.lat(), results[0].geometry.location.lng());
                // set zoom option
                map.setZoom(15);
                // center the map on the new location
                map.setCenter(results[0].geometry.location);
                createMarker(map, latlng, true, false);

                if(savetype ='update'){
                    savedata('update');
                };
                if(savedata='save'){
                    savedata('save');
                };
            } else {
                // display error
                $('#geo_detail').append('<label>Geocoder failed to retrieve address: '+status+'</label>');
                $('#disp_addr').val($('#geo_addr').val());
            };
        });
    };

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Если вы используете onclick=\"geocodeMe("+cl+"), функция geocodeMe должна быть определена как global , поэтому на верхнем уровне, как jQuery.

, я рекомендую вам посмотреть другие возможностидля реализации того же поведения: здесь и здесь .

Кроме того, вы должны понимать, что перечисление всех элементов цикла jqGrid('getDataIDs') в for может быть очень медленнымслучай большого количества элементов в сетке (около 100 и более).Гораздо более эффективный способ - использовать выбор jQuery, описанный здесь .Еще более эффективным способом является использование массива rows элемента table и свойства cells внутри любого элемента rows.См. здесь еще один ответ, который также включает соответствующую демонстрацию.

1 голос
/ 21 мая 2011

нашел ответ в этой теме Ответ здесь

Я создал класс для кнопки с именем geocode me,

gridComplete: function(){ 
            var ids = jQuery("#rowed2").jqGrid('getDataIDs'); 
            for(var i=0;i < ids.length;i++){ var cl = ids[i]; 
                be = "<input style='height:22px;width:20px;' type='button' value='E' onclick=\"jQuery('#rowed2').editRow('"+cl+"');\" />"; 
                se = "<input style='height:22px;width:20px;' type='button' value='S' onclick=\"jQuery('#rowed2').saveRow('"+cl+"');\" />"; 
                ce = "<input style='height:22px;width:20px;' type='button' value='C' onclick=\"jQuery('#rowed2').restoreRow('"+cl+"');\" />";
                gc = "<input style='height:22px;width:20px;' type='button' value='G' class='geocodeMe' rel='"+cl+"' />";
                jQuery("#rowed2").jqGrid('setRowData',ids[i],{Actions:be+se+ce+gc}); 
            } 

, а затем создал функцию щелчка для этогокласс, который читает в атрибуте rel с правильным идентификатором:

$('body').delegate('.geocodeMe', 'click', function() {
        var myID = $(this).attr('rel');
        var myData = $("#rowed2").getRowData(myID);
        rest of function code.............

    });
...