показать / скрыть div в форме Ruby on Rails - PullRequest
2 голосов
/ 12 декабря 2011

Я в отчаянии и разочарован по этому поводу: как я могу показать скрыть один или несколько div в моей форме (Ruby on Rails)?

Я просмотрел форум и безуспешно пробовал все следующее:

Я пробовал это в моем частичном представлении _form.html.erb

    <div id="foo">foo</div>
    <a href="#" onclick="Element.toggle('foo'); return false;">toggle foo</a>

Я пытался

    <div id="foo">foo</div>
    <%= link_to_function('toggle foo', "Element.toggle('foo')") %>

Я пытался

    <div id="foo" class=foo_class>foo</div>
    <a href="#" onclick="$$('.foo_class').each(Element.toggle);">toggle foo</a>

Я пытался

    <a href="javascript:void(0);" onclick="showHide('foo');">toggle foo</a>

где showHide (elementId) определяется следующим образом

    <script language="javascript" type="text/javascript">
    function showHide(elementId) {
        if (document.getElementById) {
            var element = document.getElementById(elementId);
            if (element.style.visibility == 'hidden') {
                element.style.visibility = 'visible';
            } else if (element.style.visibility == 'visible') {
                element.style.visibility = 'hidden';
            }
        }
    }
    </script>

Я также пробовал ту же функцию showHide с отображением none / block вместо видимости скрытого / видимого

У меня есть эта строка в разделе заголовка моего layouts / application.html.erb

    <%= javascript_include_tag :defaults %>

Ни одно из этих решений, найденных мной на форуме, не помогло мне.

Итак, что мне здесь не хватает?почему все решения, которые другие доказали, все еще не работают для меня?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Я решил свою проблему с помощью этого

<input type=button value="toggle foo" onclick="showHideDiv('foo');">

Спасибо всем за помощь.

1 голос
/ 12 декабря 2011

Если видимость вашего элемента равна "" (то есть не установлено, что является значением по умолчанию), вы ничего не сделаете с showHide. Вероятно, поэтому такой подход не сработал. Существует также разница между превращением объекта в невидимый (который все еще будет занимать место в вашем макете) или его скрытием (что сделает его не занимающим никакого пространства).

Что это делает?:

$('foo').toggle();

или

$('foo').invoke('toggle');

Возможно, вы используете старую библиотеку jQuery.

...