我正在尝试将一段代码从jQuery转换为prototype.js并需要一些帮助。
的Prototype.js
$$('select').invoke('observe', 'change', function() {
var sel = $(this);
var selval = $(this).getValue();
$(this).select('option').each(function (e) {
$(e).remove();
if ($(e).getValue() == selval) {
$(sel).append('<option value="'+$(e).getValue()+'" selected="selected">'+$(e).text+'</option>');
} else {
$(sel).append('<option value="'+$(e).getValue()+'">'+$(e).text+'</option>');
}
});
});
的jQuery
$('select').change(function() {
var sel = $(this);
var selval = $(this).val();
$(this).find('option').each(function () {
$(this).remove();
if ($(this).val() == selval) {
$(sel).append('<option value="'+$(this).val()+'" selected="selected">'+$(this).text()+'</option>');
} else {
$(sel).append('<option value="'+$(this).val()+'">'+$(this).text()+'</option>');
}
});
});
选择的第一部分似乎有效,但每个部分都不在原型版本中。它不喜欢getValue()等。$(e).getValue不是函数。如何让每个命令运行并检索元素值?
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:2)
工作代码:
document.observe('dom:loaded',function(){
$$('select').invoke('observe', 'change', function() {
var sel = $(this);
var selval = $(this).getValue();
$(this).select('option').each(function (e) {
$(e).remove();
if ($(e).value == selval) {
$(sel).insert('<option value="'+$(e).value+'" selected="selected">'+$(e).text+'</option>');
} else {
$(sel).insert('<option value="'+$(e).value+'">'+$(e).text+'</option>');
}
});
});
});
答案 1 :(得分:1)
因此,您循环浏览所有选项并将其删除,以便您可以使用所选属性替换它们?这听起来很难做到这一点:
$$('select').invoke('observe', 'change', function() {
this.select('option').invoke('writeAttribute', 'selected', false);
this.select('option[value='+$F(this)+']').invoke('writeAttribute', 'selected');
});