对不起,大家对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 li。
提前致谢
答案 0 :(得分:1)
我不确定我完全理解你在寻找什么,但我会在更广泛的意义上解决这个问题:
$("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”来处理第二个无序列表。
答案 1 :(得分:0)
我想我明白你在这里问的是什么,但我错了。假设我这样做,我会添加类或ID来表示元素之间的链接。例如:
<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;
});
});
});
最终结果是您对控制块,可选择项和字段进行分组,允许您根据需要存储选定的值。