可选择和“选择”字段的问题 - 访问&从客户端动态更新JSON数据

时间:2011-05-09 03:14:30

标签: jquery json jeditable

我正在使用Jeditable和Zend。

大多数更新,我想用Jeditable做。因此,页面显示信息,每个字段都可以使用Jeditable进行编辑。适用于“文本”字段。

这是问题---它带有下拉列表 我有美国Sates下拉列表。 Jeditable show是正确的,但由于它是ajax请求,因此会发生两个特定的问题

1)它将值显示为ID,而不是名称。我想,我可以从服务器响应处理它来发送名称而不是ID,但我想在客户端进行此操作

2)编辑后,它会丢失“selected”元素。理想情况下,它需要刷新'selected'元素,因为它已经改变了。如果我刷新页面,它会很好,因为它将是新的请求,但我不想那样做。这就是Ajax的全部想法: - )

理想情况下,我想拦截来自服务器的响应,并希望访问下拉列表(JSON数据)并显示状态ID的标签,并动态更改Json数据以更改下拉列表的选定值。

那么如何从Jeditable

访问和操作客户端的Json数据

这是我的代码段

$('.edit_state').editable('/User/user/updprofile',
{  id   : 'element_id',
       name : 'new_value',  
   data   : '<?php  echo json_encode(array_merge($this->aStateIdOptions, array("selected" => $this->user->state_id))); ?>',
   type   : 'select',
   submit : 'OK',
   indicator :  '<img width=14px height=14px src="/images/ui/ajax-spinner.gif">',
     style     : 'border: 0px',
    onerror: function(settings, original, xhr) {
    original.reset()
    alert(xhr.responseText)
    },
   intercept: function (jsondata) {
     obj = jQuery.parseJSON(jsondata);
     alert(obj);
     //alert(data);
     // do something 
     return(obj);
     },
   callback : function(value, settings) {
     console.log(this);
     alert(this);
     console.log(value);
     alert(value);
     console.log(settings);
     alert(settings);
     }    

});

1 个答案:

答案 0 :(得分:1)

我检查了jEditable源代码,据我所知,根据源代码,有代码可以设置选项的值。

var option = $('<option />').val(key).append(json[key]);

我认为您需要发送[CA:California,...]等信息。 但是,选项元素的选定属性有一个代码。

/* Loop option again to set selected. IE needed this... */ 
$('select', this).children().each(function() {
    if ($(this).val() == json['selected'] || 
        $(this).text() == $.trim(original.revert)) {
            $(this).attr('selected', 'selected');
    }
});

我认为您需要发送[{CA:California,selected:selected},{TX:Texas,selected:null}或{TX:Texas},...]等信息 来源代码

select: {
    element : function(settings, original) {
        var select = $('<select />');
        $(this).append(select);
        return(select);
    },
    content : function(data, settings, original) {
        /* If it is string assume it is json. */
        if (String == data.constructor) {      
            eval ('var json = ' + data);
        } else {
        /* Otherwise assume it is a hash already. */
            var json = data;
        }
        for (var key in json) {
            if (!json.hasOwnProperty(key)) {
                continue;
            }
            if ('selected' == key) {
                continue;
            } 
            var option = $('<option />').val(key).append(json[key]);
            $('select', this).append(option);    
        }                    
        /* Loop option again to set selected. IE needed this... */ 
        $('select', this).children().each(function() {
            if ($(this).val() == json['selected'] || 
                $(this).text() == $.trim(original.revert)) {
                    $(this).attr('selected', 'selected');
            }
        });
    }
}

},