日期:2014-05-16  浏览次数:20399 次

一个小功能已经实现,代码不是很明白。
功能就是点按钮,把选中的<select>的<option>,转移到另一个<select>的<option>,如图:





JScript code
$("#id_bu_add").click(function(){

    var addFlag = true;
    var to_options = $("#id_testar_addright");

    moveForm = function(){  //问题1,这是什么写法,moveForm就相当于函数名么?
        var temp = $(this).val(); //问题2,这里的this是选择的对象,这是什么语法呢?
        to_options.each(function(index, domEle2){
            if(temp == $(domEle2).val()){
                addFlag = false;
                return false;
            }
        });//问题3,当我选择两个值的时候,这个函数执行两次,为什么?

        if(addFlag){
            $("#id_testar_addright").append($(this));
        }
    };

    $("#id_testar_addleft" + " option:selected").each(moveForm);
});//问题4,为什么结果是数据从左移动到右,而不是拷贝到右?


///////////////////下面是html,class
<table>
<tr>
<td><select id="id_testar_addleft" multiple="true"><option>dd</option><option>ww</option></select></td>
<td><button id="id_bu_add" > → </button></td>
<td><select id="id_testar_addright" multiple="true"></select></td>
</tr>
</table>




------解决方案--------------------
问题1:嗯。。
问题2:this指$("#id_testar_addleft")。。
问题3:each会遍历你选择的所有值。。。
------解决方案--------------------
1,是的,
2,this 是运行时对象,具体指什么,看怎么用的,
放到
$("#id_testar_addleft" + " option:selected").each(
里就是指选中的 option 
3,each 就是jquery的遍历
4,this是对象引用,所以 append(this 就是移动了,
如果想复制过去,
 $("#id_testar_addright").append($(this).clone());
就行了

5,你的HTML是精简过的吧,原来的判断重复等都没用到