Mootools - 需要编辑下拉列表的名称才能获取值

发布于 2024-11-28 19:28:26 字数 345 浏览 0 评论 0原文

请参阅 FIDDLE

尝试在第三个下拉列表后触发警报,但他们不会。 我在表单中使用这 3 个下拉菜单。第一个和第二个下拉列表适当地提交了它们的值 - 第三个下拉列表没有 - 因为它没有将正确的名称应用于下拉列表。

我不明白为什么最后一个警报不会触发 - 因此任何有关原因的输入都会有很大帮助。

我撒了一些警报,这样我就知道我已经完成了 javascript 的工作,但最后几个警报没有触发。

我是一个彻头彻尾的 JavaScript 白痴。我认为我理解得越多,我似乎能做的就越少——所以感谢您的帮助。

See the FIDDLE

Trying to get the alerts to fire after the 3rd dropdown but they won't.
I am using these 3 dropdowns in a form. The first and second dropdowns submit their values appropriately - the 3rd one does not - because it's not getting the correct name applied to the dropdown.

I can't figure out why the last alerts will not fire - so any input on why would be of great help.

I sprinkled in the alerts so that I know how far I am getting through the javascript, but the last couple alerts do not fire.

I'm a total javascript idiot. The more I think I understand, the less I seem to be able to do - so help is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

万水千山粽是情ミ 2024-12-05 19:28:26

如果您的目标是最终在第 3 级的选择上触发事件,请像这样简化:

(function() {
    var level1 = document.getElements("div.style-sub-1"), level2 = document.getElements("div.style-sub-2");
    var beer = document.id("beerStyle");

    beer.addEvent("change", function() {
        level1.setStyle("display", "none");
        level2.setStyle("display", "none");

        var val = this.get("value");
        if (!val.length)
            return;

        document.id(this.get("value")).setStyle("display", "block");
    });

    // delegate the other selects
    $(document.body);
    document.body.addEvents({
        "change:relay(div.style-sub-1 select)": function() {
            // reset level 2
            level2.setStyle("display", "none");
            var val = this.get("value");

            if (!val.length)
                return;

            var target = document.id(val);
            if (target)
                target.setStyle("display", "block");        
        },
        "change:relay(div.style-sub-2 select)": function() {
            alert("You chose: " + this.get("value"));
        }
    });

})();

问题是 - 如果第 3 级只有 1 个选择,这不会触发更改 - 所以您确实应该保持状态您所知道的最后一个好的面包屑,例如混合面包屑。

http://jsfiddle.net/dimitar/mxaB5/2/

通过每个事件处理程序选择委托的类型。我希望它能给你一些想法 - 你最终可以只使用 2 个函数来存储你需要的任何数据。

你的问题的一部分是第二级下拉菜单可以引用在 dom 中没有以 div 和 select 形式表示的值。

if your goal is to ultimately get an event firing up upon a choice at level 3, simplify like so:

(function() {
    var level1 = document.getElements("div.style-sub-1"), level2 = document.getElements("div.style-sub-2");
    var beer = document.id("beerStyle");

    beer.addEvent("change", function() {
        level1.setStyle("display", "none");
        level2.setStyle("display", "none");

        var val = this.get("value");
        if (!val.length)
            return;

        document.id(this.get("value")).setStyle("display", "block");
    });

    // delegate the other selects
    $(document.body);
    document.body.addEvents({
        "change:relay(div.style-sub-1 select)": function() {
            // reset level 2
            level2.setStyle("display", "none");
            var val = this.get("value");

            if (!val.length)
                return;

            var target = document.id(val);
            if (target)
                target.setStyle("display", "block");        
        },
        "change:relay(div.style-sub-2 select)": function() {
            alert("You chose: " + this.get("value"));
        }
    });

})();

the problem is - if the level 3 has just 1 choice, which won't trigger a change - so you really ought to keep state of the last good breadcrumb you know of, eg, hybrid.

http://jsfiddle.net/dimitar/mxaB5/2/

via a single event handler per select type that is delegated. i hope it gives you some ideas - you can ultimately work with just 2 functions to store whatever data you need.

part of you problem is that the 2nd level dropdowns can reference values that have no representation in the dom in the form of a div and a select.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文