2 lyx15091286512 lyx15091286512 于 2015.07.20 22:39 提问

javascript方法封裝問題

我想寫個方法類似於jquery的這種寫法
$(id).click(function(){

})

这样写為什麼不行 應該怎麼寫
window.$=function(id){
return document.getElementById(id);
}
$.click=function(f){

        $.attachEvent("onclick",f());
    }

8个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.07.20 22:56
这思路是不对的。
 window.$=function(id){  // window.$表示的是function,而不是dom节点
return document.getElementById(id);
}
$.click=function(f){//这里的$是function,不是dom节点,因此$.click无意义。$.attachEvent也无意义。
        $.attachEvent("onclick",f());
    }
cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.07.20 23:16
showbo
showbo   Ds   Rxr 2015.07.21 10:54

    <div id="dv">dv</div>
    <script>
        window.$ = function (id) {
            var dom = document.getElementById(id);
            dom.click = $.click;
            return dom;
        }
        $.click = function (f) {
            this.attachEvent("onclick", f/*()*/);
        }
        $('dv').click(function () { alert(11) })
    </script>
showbo
showbo 回复lyx15091286512: addEventLisener你的参数错误,不需要on,而且少了第三个参数。<div id="dv">dv</div> <script> window.$ = function (id) { var dom = document.getElementById(id); dom.click = $.click; return dom; }; $.click = function (f) { if (this.attachEvent) this.attachEvent("onclick", f); else this.addEventListener("click", f,false); }; $('dv').click(function () { alert(11) }); </script> 。有用记得采纳
2 年多之前 回复
lyx15091286512
lyx15091286512 我在最底下发的代码,看着清楚
2 年多之前 回复
lyx15091286512
lyx15091286512 谢谢你了,但是弹不出来了
2 年多之前 回复
lyx15091286512
lyx15091286512 <script> window.$ = function (id) { var dom = document.getElementById(id); dom.click = $.click; return dom; } $.click = function (f) { if(this.attachEvent) this.attachEvent("onclick", f); else this.addEventListener("onclick", f); } $('dv').click(function () { alert(11) }) </script>
2 年多之前 回复
lyx15091286512
lyx15091286512 <script> window.$ = function (id) { var dom = document.getElementById(id); dom.click = $.click; return dom; } $.click = function (f) { if(this.attachEvent) this.attachEvent("onclick", f); else this.addEventListener("onclick", f); } $('dv').click(function () { alert(11) }) </script>
2 年多之前 回复
lyx15091286512
lyx15091286512 <script> window.$ = function (id) { var dom = document.getElementById(id); dom.click = $.click; return dom; } $.click = function (f) { if(this.attachEvent) this.attachEvent("onclick", f); else this.addEventListener("onclick", f); } $('dv').click(function () { alert(11) }) </script>
2 年多之前 回复
showbo
showbo 回复lyx15091286512:请认真看代码。。你的f()的括号去掉。。你的都直接执行f了将返回值作为事件处理函数
2 年多之前 回复
lyx15091286512
lyx15091286512 还没有点击 就运行了
2 年多之前 回复
u013829202
u013829202   Rxr 2015.07.21 11:08

怎么看都是jq的写法。 js只有三种获取方式,document.getElementById...等。在JavaScript中$是document.getElementById()的简写或者变量名...等等。而在jq里面,指代他对象的引用.

lyx15091286512
lyx15091286512   2015.07.21 21:19
<script>
    window.$ = function (id) {
        var dom = document.getElementById(id);
        dom.click = $.click;
        return dom;
    }
    $.click = function (f) {
        if(this.attachEvent)
        this.attachEvent("onclick", f);
        else
        this.addEventListener("onclick", f);
    }
    $('dv').click(function () { alert(11) })
</script>
lyx15091286512
lyx15091286512   2015.07.20 22:41
eval("alert('1')");
lyx15091286512
lyx15091286512   2015.07.20 22:42

"eval(&quot;alert(&#39;1&#39;)&quot;);"

CSDNXIAOD
CSDNXIAOD   2015.07.20 22:43

如何在JavaScript中封装Java的StringBuffer方法
封装方法到对象(javascript)
javascript方法的重载问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片