我正在使用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);
}
});
答案 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');
}
});
}
}
},