jQ给下拉框绑定事件,为什么要绑定在框(select标签)上,而不是绑定在选项(option标签)上

这是我在学习锋利的 jquery 书中 5.1.4 的代码时遇到的一个小问题,源代码如下:

<head>
<style type="text/css">
* { margin:0; padding:0; }
div.centent {
   float:left;
   text-align: center;
   margin: 10px;
}
span {
    display:block;
    margin:2px 2px;
    padding:4px 10px;
    background:#898989;
    cursor:pointer;
    font-size:12px;
    color:white;
}
</style>

<script src="../../scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
    //移到右边
    $(‘#add‘).click(function() {
    //获取选中的选项,删除并追加给对方
        $(‘#select1 option:selected‘).appendTo(‘#select2‘);
    });
    //移到左边
    $(‘#remove‘).click(function() {
        $(‘#select2 option:selected‘).appendTo(‘#select1‘);
    });
    //全部移到右边
    $(‘#add_all‘).click(function() {
        //获取全部的选项,删除并追加给对方
        $(‘#select1 option‘).appendTo(‘#select2‘);
    });
    //全部移到左边
    $(‘#remove_all‘).click(function() {
        $(‘#select2 option‘).appendTo(‘#select1‘);
    });
    //双击选项
    $(‘#select1‘).dblclick(function(){    //绑定双击事件
        //获取全部的选项,删除并追加给对方
        $("option:selected",this).appendTo(‘#select2‘); //追加给对方
    });
    //双击选项
    $(‘#select2‘).dblclick(function(){
       $("option:selected",this).appendTo(‘#select1‘);
    });
});
</script>

</head>
<body>
<!--左边-->
    <div class="centent">
        <select multiple="multiple" id="select1" style="width:100px;height:160px;"> <!--multiple 可以选择多个选项-->
            <option value="1">选项1</option>
            <option value="2">选项2</option>
            <option value="3">选项3</option>
            <option value="4">选项4</option>
            <option value="5">选项5</option>
            <option value="6">选项6</option>
            <option value="7">选项7</option>
        </select>
       大专栏  jQ给下拉框绑定事件,为什么要绑定在框(select标签)上,而不是绑定在选项(option标签)上  <div>
            <span id="add" >选中添加到右边&gt;&gt;</span>
            <span id="add_all" >全部添加到右边&gt;&gt;</span>
        </div>
    </div>

<!--右边-->
    <div class="centent">
        <select multiple="multiple" id="select2" style="width: 100px;height:160px;">
            <option value="8">选项8</option>
        </select>
        <div>
            <span id="remove">&lt;&lt;选中删除到左边</span>
            <span id="remove_all">&lt;&lt;全部删除到左边</span>
        </div>
    </div>
</body>
</html>

这是锋利的 jquery 书中 5.1.4 的代码。显示的效果是这样的:

在双击的绑定上,示例代码绑定在了框上(select 元素上),我自己练习的时候想当然的就绑定在了 select 里面的 option 上,代码如下

$("#select1 option").dblclick(function () {
    $(this).appendTo("#select2")
});
$("#select2 option").dblclick(function () {
    $(this).appendTo("#select1")
});

然后就出问题了,左边的选项移动到右面去之后,再双击无法移动回左边。

后来想明白了,我用了$(function(){})这个入口函数,在页面刚加载完成的时候,按照我的写法,把双击事件绑定到了现有的所有 option 上;

对于左边的 option,在页面加载完后被绑定了双击事件,双击可以移动到对面去;但是移动过去之后,这个 option 就失去了双击事件了,右边的 select 原有的元素已经在页面加载的时候被绑定了双击事件了,新移动过去的 option 也不会被再绑定一次双击事件,所以双击该元素没有反应,也不会报错。

但如果绑定在 select 上,不管这个 option 是原住民还是新移民,只要符合选择器里的条件,都可以执行对应的 function 里的语句。

原文地址:https://www.cnblogs.com/lijianming180/p/12014168.html

时间: 2024-11-06 21:28:19

jQ给下拉框绑定事件,为什么要绑定在框(select标签)上,而不是绑定在选项(option标签)上的相关文章

vue加jq的下拉加载总结

先贴代码.要想做下拉加载 ,那么就有一个得先判断在什么时候去加载.我做的判断是当底部离页面还有100左右是我就设置加载.所以,我先获取所有的li列表.然后设置body的高度,拿到body高度,在拿到网页滚动过的高度.把列表的高度减去body加滚动过的高度.就是底部离页面的距离高度. 使用vue的钩子函数,不懂得可以先看vue文档.然后在使用监听滚动条的事件.其他一切看代码. 原文地址:https://www.cnblogs.com/dongfangtaling/p/9146228.html

jq模仿下拉菜单select

今天公司app ios版内测,发现select在安卓和ios上样式不统一,并且不好修改,一气之下放弃使用select,手写了一个用div模仿select的模块 话不多说上代码 //样式 .zezhao { width: 100%; height: 800px; background-color: rgba(0, 0, 0, 0.7); position: fixed; top: 0; } .disn { display: none; } .disb { display: block; } .yu

下拉框、多选框、单选框 通过TagHelper绑定数据

在DataSocure通过枚举 实现下拉菜单 在DataSocure通过配置 实现下拉菜单 在DataSocure通过Sql 实现下拉菜单 在页面上通过枚举 实现下拉菜单 在页面上通过配置 实现下拉菜单 在页面上通过实体 实现下拉菜单 在DataSocure通过枚举 实现单选框 在DataSocure通过配置 实现单选框 在DataSocure通过Sql 实现单选框 在页面上通过枚举 实现单选框 在页面上通过配置 实现单选框 在页面上通过实体 实现单选框 在DataSocure通过枚举 实现多选

基于jquery扩展漂亮的下拉框——ComboBox

关于web前端自定义控件——ComboBox(下拉框),以往我在使用下拉框控件老是为了样式丑陋而烦恼,现在分享这个控件,希望有用的同仁们可以收藏,或进行二次修改,达到你想要的效果. 分解自定义下拉框: 1.创建构造函数,初始化赋值控件值. 2.绑定控件呈现在前台. 3.点击下拉框控件,展示下拉列表 4.点击触发下拉框控件,收起下拉列表. 5.点击下拉项触发事件. 代码如下: Html代码: 1 <b class="select_type"></b> css样式:

jquery操作select下拉框的多种方法(选中,取值,赋值等)

jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text3. var checkValue=$("#select

JQuery操作下拉框

转载自下面的链接,很有用的. http://www.cnblogs.com/yrhua/archive/2012/11/04/2753571.html 要实现这种效果: HTML代码 <script src="js/jquery-1.7.2.min.js"></script> <table> <tr> <td> <!--multiple设定下拉框可以多选,size设定下拉框不呈现下拉方式,--> <selec

jQuery插件——下拉选择框

其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $.fn.extend({ dropdown:function (options) { return this.each(function (i, val) { $(val).css("position", "relative"); // 设置默认参数 var opts =

jquery操作select下拉框的多种方法(选中,取值,赋值等) 转载

jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发 2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text 3. var checkValue=$("#se

jQuery动态生成&lt;select&gt;下拉框

前一阵在项目里需要动态生成下拉框,找了一下用jQuery实现比较方便,这里整理一下. 下文所述方法只是本人在项目中遇到问题的解决方法,场景较为简单,也希望能帮助有需要的朋友 1.动态生成下拉框的两种方式 (1)将数据放在model中,JSP页面用EL表达式${}取出,该方式缺点是数据更改时必须刷新整个页面,本文不过多描述. (2)就是本文要说的jQuery动态生成了,该方式适合数据频繁变动的场景. 2.<select>组成 <select> <option value=”aa