JQuery добавить текст в текстовое поле - PullRequest
0 голосов
/ 15 января 2010

Извините, ребята, я все еще нахожусь в JQuery. Оказал большую помощь в создании списка выбора, подобного этому

$(document).ready(function(){

    $('.selectoption li').not(':first').hide();

    $('.prev, .next').click(function() {
        // Determine the direction
        var dir = $(this).hasClass('prev') ? 'prev' : 'next';
        // Get the li that is currently visible
        var current = $('.selectoption li:visible');

        // Get the element that should be shown next according to direction
        var next = dir == 'prev' ? current.prev('li') : current.next('li');

        // If there's no more in that direction, select first/last
        if(next.size() == 0) {
            next = dir == 'prev' ? $('.selectoption li:first') : $('.selectoption li:first');
        }

        // Hide them all..
        $('.selectoption li').hide();
        // And show the new one
        next.show();

        return false;
    });

});  

Но как я могу затем добавить значение выбранного li в текстовое поле, чтобы его можно было использовать в форме - в этом случае нельзя использовать Ajax и т. Д., Поскольку список li находится за пределами формы.

Кроме того, если я скажу 3 или 4 из этих ul ul на странице, как мне обернуть вышеупомянутый код таким образом, чтобы кнопка next / prev работала только с ul li, к которому они относятся.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 января 2010

Я не уверен, что полностью понимаю, что вы ищете, но я остановлюсь на этом в более общем смысле:

$("li").click(function(){
  // Place LI text as value of <input type="text" name='fname' />
  $(":input[name='fname']").val($(this).text());
});

Чтобы сделать ваш код более строгим в отношении того, к какому UL он обращается в своих селекторах:

<ul>
  <li class="selectOption">Ignore Me</li>
</ul>
<ul>
  <li class="selectOption">Include Me</li>
</ul>

Мы могли бы использовать следующее:

$("ul:eq(1) .selectOption").click(function(){
  // only the LI in the second UL will trigger this
});

Обратите внимание, что мы имеем дело с индексом, начинающимся с нуля, поэтому используем «1» для адресации второго неупорядоченного списка.

0 голосов
/ 15 января 2010

Мне кажется, я понимаю, о чем вы здесь спрашиваете, но я могу ошибаться. Предполагая, что я это сделаю, я бы добавил классы или идентификаторы для представления связи между элементами. Например:

<input type="hidden" name="degree" id="degree" />
<div id="degree_selectable_control" class="selectable_control">
    <a href="#" class="prev">Prev</a> |
    <a href="#" class="next">Next</a>
</div>
<ul id="degreee_selectable" class="selectable">
    <li>Associates</li>
    <li>Bachelor's</li>
    <li>Graduate</li>
    <li>Other</li>
</ul>

<input type="hidden" name="salary" id="salary" />
<div id="salary_selectable_control" class="selectable_control">
    <a href="#" class="prev">Prev</a> |
    <a href="#" class="next">Next</a>
</div>
<ul id="salary_selectable" class="selectable">
    <li>> $20,000</li>
    <li>$20,000 - $35,000</li>
    <li>$35,000 - $50,000</li>
    <li>< $50,000</li>
</ul>

Тогда вы можете изменить свой существующий JavaScript-код на что-то вроде:

$(document).ready(function(){
    // init the selectables
    $('.selectable').each(function(){
        $(this).find('li').not(':first').hide();
    });
    // assign the handlers for each control
    $('.selectable_control').each(function(){
        var field_id = this.id.replace(/_selectable_control$/, ''),
            $selectable = $('#' + field_id + '_selectable'),
            $field = $('#' + field_id);

        $(this).find('.prev, .next').click(function(){
            // Determine the direction
            var dir = $(this).hasClass('prev') ? 'prev' : 'next';
            // Get the li that is currently visible
            var current = $selectable.find('li:visible');

            // Get the element that should be shown next according to direction
            var next = dir == 'prev' ? current.prev('li') : current.next('li');

            // If there's no more in that direction, select first/last
            if(next.length === 0) {
                next = dir == 'prev' ? $selectable.find('li:last') : $selectable.find('li:first');
            }

            // Hide them all..
            $selectable.find('li').hide();
            // And show the new one
            next.show();
            // And update the corresponding field
            $field.val( next.text() );

            return false;
        });
    });
});

Конечный результат состоит в том, что вы группируете блоки управления, выбираемые элементы и поля, что позволяет вам сохранять выбранные значения по желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...