• event.target/srcElement一点应用


    今天工作遇到一个问题,在朋友帮助下解决了,写下来跟大家分享下。

    首先说下需求,有一个文本框,文本框下面有个隐藏的div,div中有几个a标签,当点击文本框时候,div显示出来,点击div中的a标签,会将a标签的值赋到文本框中。点击其他地方时候则隐藏div。

    如图   点击文本框,下面div显示

    点击a标签时候 a标签值赋到文本框中

    当点击外面时候div隐藏

    刚开始想的很简单,给文本框一个onblur跟onfoucs事件,分别对应着文本框的隐藏跟显示。a标签注册点击事件。

    <table>
                <tr>
                    <td>
                    </td>
                    <td id="tdtd">
                        <input type="text" id="txtV" value="">
                        <div id="dv" style="display: none; border: solid 1px red">
                            <a href="javascript:void(0)" onclick="addFun(this,1212)">1212</a>
                        </div>
                    </td>
                </tr>
            </table>

    js:

     $(function () {
                $("#txtV").focus(function () {
                    $("#dv").show();
                }).blur(function () {
                    $("#dv").hide();
                });
            })
    
    function addFun(a, value) {
                $(a).parent().prev("input").val(value);
            }

    但是这样子出现了一个问题 ,当点击a标签的时候,他首先触发的文本框的blur事件,这样子a标签的onclick就没有效果。

    后来朋友的提示下改了下,思路是这样子的,给文本框一个click事件,让div显示。而给body一个mousedown事件,当鼠标不在文本框以及div中的时候,让他隐藏,刚开始还是想获取mousedown时候的鼠标位置,跟div 的height,width比较,想想比较麻烦。后来朋友一指点,恍然大悟,可以获取选中id,跟文本框,div比较。

    改后的js:

     $(function () {
                $("#txtV").click(function () {
                    $("#dv").show();
                })
    
                $("body").bind("mousedown", function () {
                    var obj = event.srcElement ? event.srcElement : event.target;//为了兼容IE以及Chrome/FF
                    if (obj.id != "dv" && obj.id != "txtV" && $(obj).parents("#dv").length == 0) {
                        $("#dv").hide();
                    }
                })
    
            })
    
            function addFun(a, value) {
                $(a).parent().prev("input").val(value);
            }

    当选中的id不为div以及不为文本框,以及不为div中子元素(a标签)时候,则让div隐藏。

      

  • 相关阅读:
    javascript数据类型转换
    javascript运算符
    数据类型
    第一个JavaScript代码
    Javascript简介
    z-index
    Java代码优化
    Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
    java中继承条件下构造方法的执行过程
    java中的继承、重载和覆盖是什么意思
  • 原文地址:https://www.cnblogs.com/sjr10/p/srcElement_target.html
Copyright © 2020-2023  润新知