将对象传递给函数但无法识别

时间:2015-07-14 16:32:38

标签: javascript jquery

我的代码

<html>

<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript">
        function process(e) {

            alert("Hello! I am an alert box1!!");
            e.hide();
        };

        $(document).ready(function() {

            var p = $("#id1"); //jquery object  
            p.click(function() {
                process(this); //line A
            });
        });
    </script>
</head>

<body>
    <p id=id1>If you click on me, I will disappear.</p>
</body>

</html> 

单击时文本死亡不会消失,控制台报告错误:

  

TypeError:e.hide不是函数

但如果我更改为A行的代码,如下所示

<html>

<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript">
        function process(e) {

            alert("Hello! I am an alert box1!!");
            e.hide();
        };

        $(document).ready(function() {

            var p = $("#id1"); //jquery object  
            p.click(function() {
                process(p); //change this to p, Line A
            });

        });
    </script>
</head>

<body>
    <p id=id1>If you click on me, I will disappear.</p>
</body>

</html>

它有效!!!

我也尝试代码:

<html>

<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript">
        function process(e) {

            alert("Hello! I am an alert box1!!");
            e.style.visibility = "hidden";
        };

        $(document).ready(function() {

            var p = $("#id1")[0]; //jquery object to dom object
            p.addEventListener("click", function() {
                process(this);
            });

        });
    </script>
</head>

<body>
    <p id=id1>If you click on me, I will disappear.</p>
</body>

</html>

它也有效。

您评论欢迎

1 个答案:

答案 0 :(得分:1)

您可以使用console.log()查看javascript如何处理您发送的内容。

执行console.log(this)会在日志中显示:

<p id="id1">If you click on me, I will disappear.</p>

您可以看到的是纯DOM对象。

但是,console.log(p)执行此操作会在日志中显示:

[p#id1, context: document, selector: "#id1"]

表示可以对其执行操作的jQuery对象。如果你想让jQuery从this为你提取对象,请将你在jQuery中发送的内容包装起来:

function process(e){

    alert("Hello! I am an alert box1!!");
    $(e).hide(); // Wrap to convert DOM object.
};

$(document).ready(function(){

    var p =$("#id1");//jquery object  
    p.click(function(){
         process(this);//change this to p, Line A
    });


});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p id=id1>If you click on me, I will disappear.</p>