动态菜单选择 Rails 不起作用

发布于 2024-11-15 08:15:00 字数 1900 浏览 0 评论 0原文

我正在尝试构建一个链接选择菜单。这是我使用的教程: http://railscasts.com/episodes/88-dynamic-选择菜单 出了点问题,我不知道我错过了什么。

javascript

var sottocategorie = new Array();
<% for element in @sottocategorie -%>
    sottocategorie.push(new Array(<%= element.idcategoria %>, <%= element.c2 %>));
<% end -%>

function selezionacategoria() {

    categoriaid = $('segnalazione_categoria1').getValue();
    options = $('segnalazione_categoria2').options;

    options.length = 1;
    sottocategorie.each(function(elementement) {
        if (element[0] == categoriaid) {

            options[options.length] = new Option(element[1]);
        }
    });
    if (option.length == 1) {
        $('sottocategoria_field').hide();
    } else {
        $('sottocategoria_field').show();
    }
}

document.observe('dom:loaded', function() {
    //selezionacategoria();
    $('segnalazione_categoria1').observe('change', selezionacategoria);
});

html

<label for="segnalazione_categoria1">Categoria:</label>
          <%= f.collection_select :categoria1, Categorium.find(:all), :id, :c1, :prompt => "Seleziona categoria" %>

        <p id="sottocategoria_field">
            <label for="segnalazione_categoria2">Categoria:</label>
          <%= f.collection_select :categoria2, Sottocategoria1.find(:all), :id, :c2, :prompt => "Seleziona sottocategoria" %>
        </p> 

路线

  match '/:controller(/:action(/:id))'

链接的选择菜单不运行,“过滤器”不起作用,也

if (option.length == 1) {
            $('sottocategoria_field').hide();
        } else {
            $('sottocategoria_field').show();
        }

不起作用。

I'm trying to build a chained select menu. This is the tutorial I used: http://railscasts.com/episodes/88-dynamic-select-menus
Something goes wrong, I don't know what I'm missing.

javascript

var sottocategorie = new Array();
<% for element in @sottocategorie -%>
    sottocategorie.push(new Array(<%= element.idcategoria %>, <%= element.c2 %>));
<% end -%>

function selezionacategoria() {

    categoriaid = $('segnalazione_categoria1').getValue();
    options = $('segnalazione_categoria2').options;

    options.length = 1;
    sottocategorie.each(function(elementement) {
        if (element[0] == categoriaid) {

            options[options.length] = new Option(element[1]);
        }
    });
    if (option.length == 1) {
        $('sottocategoria_field').hide();
    } else {
        $('sottocategoria_field').show();
    }
}

document.observe('dom:loaded', function() {
    //selezionacategoria();
    $('segnalazione_categoria1').observe('change', selezionacategoria);
});

html

<label for="segnalazione_categoria1">Categoria:</label>
          <%= f.collection_select :categoria1, Categorium.find(:all), :id, :c1, :prompt => "Seleziona categoria" %>

        <p id="sottocategoria_field">
            <label for="segnalazione_categoria2">Categoria:</label>
          <%= f.collection_select :categoria2, Sottocategoria1.find(:all), :id, :c2, :prompt => "Seleziona sottocategoria" %>
        </p> 

routes:

  match '/:controller(/:action(/:id))'

The chained select menu doesn't run, the "filter" doesn't work, and also

if (option.length == 1) {
            $('sottocategoria_field').hide();
        } else {
            $('sottocategoria_field').show();
        }

doesn't work.

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

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

发布评论

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

评论(1

风追烟花雨 2024-11-22 08:15:00

解决方案:

我使用 jQuery 更改了 javascript 文件:

var sottocategorie = new Array();
<% for sottocategoria in @sottocategorie %>
    sottocategorie.push(new Array('<%= sottocategoria.idcategoria %>', '<%= escape_javascript(sottocategoria.c2) %>', <%= sottocategoria.id %>));
<% end %>

function menuSelected(orig_menu, new_menu, item_array) {
    orig_value = $('#segnalazione_categoria1 :selected').text();

    //alert(orig_value);
    $(new_menu).empty();
    jQuery.each(item_array, function(i, val) {
        if (val[0] == orig_value) {
            $(new_menu).append($("<option></option>").attr("value",val[2]).text(val[1]));
        }
    });
}

$(document).ready(function(){

//bind the click event to the city submit button
    $('#submit_button').bind('click', function () {

        menuSelected('#segnalazione_categoria1', '#segnalazione_categoria2', sottocategorie);
    });

});

具有三级链接的解决方案:

var sottocategorie = new Array();
var subsottocategorie = new Array();
<% for sottocategoria in @sottocategorie %>
    sottocategorie.push(new Array('<%= sottocategoria.idcategoria %>', '<%= escape_javascript(sottocategoria.c2) %>', <%= sottocategoria.id %>));
<% end %>
<% for subsottocategoria in @subsottocategorie %>
    subsottocategorie.push(new Array('<%= subsottocategoria.idsottocategoria1s %>', '<%= escape_javascript(subsottocategoria.c3) %>', <%= subsottocategoria.id %>));
<% end %>

function menuSelected(orig_menu, new_menu, item_array) {
    orig_value = $(''+ orig_menu + ' :selected').text();
    //alert(orig_value);
    $(new_menu).empty();
    jQuery.each(item_array, function(i, val) {
        if (val[0] == orig_value) {
            $(new_menu).append($("<option></option>").attr("value",val[1]).text(val[1]));
        }
    });
}

$(document).ready(function(){
 $(".nascosto").hide();
 $(".nascosto1").hide();
//bind the click event to the city submit button
    $('#segnalazione_categoria1').bind('click', function () {
        $(".nascosto").show();
        $('#segnalazione_categoria3').empty();
        menuSelected('#segnalazione_categoria1', '#segnalazione_categoria2', sottocategorie);
    });
    $('#segnalazione_categoria2').bind('click', function (event) {
        $(".nascosto1").show();
        menuSelected('#segnalazione_categoria2', '#segnalazione_categoria3', subsottocategorie);
    });
});

SOLUTION:

I've changed the javascript file using jQuery:

var sottocategorie = new Array();
<% for sottocategoria in @sottocategorie %>
    sottocategorie.push(new Array('<%= sottocategoria.idcategoria %>', '<%= escape_javascript(sottocategoria.c2) %>', <%= sottocategoria.id %>));
<% end %>

function menuSelected(orig_menu, new_menu, item_array) {
    orig_value = $('#segnalazione_categoria1 :selected').text();

    //alert(orig_value);
    $(new_menu).empty();
    jQuery.each(item_array, function(i, val) {
        if (val[0] == orig_value) {
            $(new_menu).append($("<option></option>").attr("value",val[2]).text(val[1]));
        }
    });
}

$(document).ready(function(){

//bind the click event to the city submit button
    $('#submit_button').bind('click', function () {

        menuSelected('#segnalazione_categoria1', '#segnalazione_categoria2', sottocategorie);
    });

});

SOLUTION WITH THREE LEVELS OF CHAINING:

var sottocategorie = new Array();
var subsottocategorie = new Array();
<% for sottocategoria in @sottocategorie %>
    sottocategorie.push(new Array('<%= sottocategoria.idcategoria %>', '<%= escape_javascript(sottocategoria.c2) %>', <%= sottocategoria.id %>));
<% end %>
<% for subsottocategoria in @subsottocategorie %>
    subsottocategorie.push(new Array('<%= subsottocategoria.idsottocategoria1s %>', '<%= escape_javascript(subsottocategoria.c3) %>', <%= subsottocategoria.id %>));
<% end %>

function menuSelected(orig_menu, new_menu, item_array) {
    orig_value = $(''+ orig_menu + ' :selected').text();
    //alert(orig_value);
    $(new_menu).empty();
    jQuery.each(item_array, function(i, val) {
        if (val[0] == orig_value) {
            $(new_menu).append($("<option></option>").attr("value",val[1]).text(val[1]));
        }
    });
}

$(document).ready(function(){
 $(".nascosto").hide();
 $(".nascosto1").hide();
//bind the click event to the city submit button
    $('#segnalazione_categoria1').bind('click', function () {
        $(".nascosto").show();
        $('#segnalazione_categoria3').empty();
        menuSelected('#segnalazione_categoria1', '#segnalazione_categoria2', sottocategorie);
    });
    $('#segnalazione_categoria2').bind('click', function (event) {
        $(".nascosto1").show();
        menuSelected('#segnalazione_categoria2', '#segnalazione_categoria3', subsottocategorie);
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文