我是Prototype的新手,我无法理解这里提供的极简主义文档http://harvesthq.github.com/chosen/
它表示要动态更新selected.js,我们应该使用此代码段
Event.fire($("form_field"), "liszt:updated");
我不明白的是,哪个元素需要针对Event.fire。在我的例子中,我有一个带有两个select元素的动态表单。仅在用户选择第一个选择元素上的选项后才启用第二个选择元素。就像这个插图一样:
所以我只是尝试了我的代码。这是:
// let say I want to make all .chzn-select element replaced by chosen.js
var el = $$(".chzn-select");
// this is the code to make all .chzn-select replaced by chosen.js
document.observe('dom:loaded', function(evt) {
var select, selects, _i, _len, _results;
if (Prototype.Browser.IE && (Prototype.BrowserFeatures['Version'] === 6 || Prototype.BrowserFeatures['Version'] === 7)) { return; }
selects = el; _results = [];
for (_i = 0, _len = selects.length; _i < _len; _i++) {
select = selects[_i];
_results.push(new Chosen(select));
}
});
// this is what I used to observe the change event of the .chzn-select element
el.invoke('observe', 'change', function() {
// I have successfully updated all the .chzn-select element after the change of some other .chnz-select
myOwnObjet.myOwnFunction(el);
// now this is where I get confused, I want to update all the generated chosen.js selector
Event.fire(el, "liszt:updated");
});
在那个例子中,Event.fire似乎根本不起作用......那么我在这里做错了什么?在用户选择尺寸选择后,我怎样才能更新selected.js版本的颜色选择更新?
答案 0 :(得分:1)
在所有observe
元素上调用.chzn-select
事件时,使用el
作为当前元素,它不会反映数组中的实际元素。
试试这个:
el.invoke('observe', 'change', function(ev) {
var nev = Event.element(ev);
myOwnObject.myOwnFunction(nev);
Event.fire(nev, 'liszt:updated');
});
<强>更新强>
好的,经过彻底调查后,我发现了问题,event.simulate
未被包含在内,我完全修复了代码,请查看this fiddle。
以下是小提琴中使用的代码:
var selects;
document.observe('dom:loaded', function(evt) {
selects = $$('select.chzn-select').inject($H(), function(hsh, sl) {
hsh.set(sl.id, new Chosen(sl));
return hsh;
});
selects.each(function(pair) {
Event.observe($(pair.key), 'change', function(ev) {
myOwnFunction($(pair.key), pair.value);
});
});
});
function myOwnFunction(select, chzn) {
if (select.id === 'sl-color') {
var size = $('sl-size');
size.disabled = false;
Event.fire(size, 'liszt:updated');
}
}