4 回答
我设法让它工作,将你所有的代码重写成整齐的一个衬里。
JSFiddle:(另一个元素的MOVE选项)-http://jsfiddle.net/GJJQw/
JSFiddle:(另一个元素的COPY选项)-http://jsfiddle.net/dEE7A/
下面COPIES
将选择元素编码到另一个选择框中。
$('[id^=\"btnRight\"]').click(function (e) {
$(this).prev('select').find('option:selected').clone().appendTo('#isselect_code');
});
$('[id^=\"btnLeft\"]').click(function (e) {
$(this).next('select').find('option:selected').clone().appendTo('#canselect_code');
});
如果你想MOVE
(即从一个删除,然后添加到另一个).. 使用这个:
$('[id^=\"btnRight\"]').click(function (e) {
$(this).prev('select').find('option:selected').remove().appendTo('#isselect_code');
});
$('[id^=\"btnLeft\"]').click(function (e) {
$(this).next('select').find('option:selected').remove().appendTo('#canselect_code');
});
这是一个小的逐步细分:
// the button that was clicked
$(this)
// .next('select') = get the next <select> element
.next('select').
// .find('option:selected') = get all the selected options
.find('option:selected')
// .remove() [or .clone()] = Remove or clone the found options
.remove() // OR .clone()
// .appendTo('#id-of-element') = Append the found elements to the other select box
.appendTo('#canselect_code');
因此,通过更改为.remove()
,.clone()
您会将选项复制到另一个选择,否则remove()
将从该选择元素中删除它,并将其附加到另一个。
感谢您提供快速/优质的答案!
这在我的应用程序中完美运行:http: //jsfiddle.net/GJJQw/1/
我只是修改了 appendTo 选择器,因为我不知道下一个选择的 ID/名称,而且我在同一个网络表单上有很多(是的,我知道,无论如何,这是一个糟糕而丑陋的表单......)
JS:
$('[id^=\"btnRight\"]').click(function (e) {
$(this).prev('select').find('option:selected').remove().appendTo($(this).nextAll('select'));
});
$('[id^=\"btnLeft\"]').click(function (e) {
$(this).next('select').find('option:selected').remove().appendTo($(this).prevAll('select'));
});
恶魔oneliner 3:-)
再次感谢埃里克
请参考这个更新的小提琴,http://jsfiddle.net/NpTzR/1/
您的代码中有两个问题,
1、获取所选选项的代码错误。以下是它应该是的样子。
var selectedOpts = $(this).prev('select').find('option:selected');
2nd,获取将选项移动到的选择的代码错误。我想不出不使用 css 选择器来获取选择的方法。在我看来,这样做可以清楚地传达意图。
修改标记(为每个选择添加了一个 css 类):
<div>
<select id='canselect_code' name='canselect_code' multiple class='fl js-rightSelect'>
<option value='1'>toto</option>
<option value='2'>titi</option>
</select>
<input type='button' id='btnRight_code' value=' > ' />
<br>
<input type='button' id='btnLeft_code' value=' < ' />
<select id='isselect_code' name='isselect_code' multiple class='fr js-leftSelect'>
<option value='3'>tata</option>
<option value='4'>tutu</option>
</select>
</div>
修改过的js
$('[id^=\"btnRight\"]').click(function (e) {
var $selectedOpts = $(this).prev('select').find('option:selected'),
$nextSelect = $(this).siblings('.js-leftSelect');
if ($selectedOpts.length === 0) {
alert('Nothing to move.');
e.preventDefault();
} else {
$nextSelect.append($selectedOpts.clone());
$selectedOpts.remove();
}
});
$('[id^=\"btnLeft\"]').click(function (e) {
var $selectedOpts = $(this).next('select').find('option:selected'),
$prevSelect = $(this).siblings('.js-rightSelect');
if ($selectedOpts.length === 0) {
alert('Nothing to move.');
e.preventDefault();
} else {
$prevSelect.append($selectedOpts.clone());
$selectedOpts.remove();
}
});
试试这个 javascript 代码
$(document).ready(function(){
$("#btnRight_code").click(function(){
$("#canselect_code option:selected").remove().appendTo($("#isselect_code"));
})
$("#btnLeft_code").click(function(){
$("#isselect_code option:selected").remove().appendTo($("#canselect_code"));
})
});