zoukankan      html  css  js  c++  java
  • 转载2010年3月4日dojo学习笔记 dojo.disconnect

    1、阻止浏览器默认事件的发生

    stopEvent:
    var foo = dojo.byId("foo"); //some anchor element
    dojo.connect(foo, "onclick", function(evt) {
    console.log("anchor clicked");
    dojo.stopEvent(evt); //suppress browser navigation and squash any event bubbling
    });
    preventDefault:
    var bar = dojo.byId("bar"); //some form element
    dojo.connect(bar, "onsubmit", function(evt) {
    console.log("form submitted");
    evt.preventDefault( ); //suppress browser navigation but allow event bubbling
    });

    2、事件触发只执行一次

    var handle = dojo.connect(
    dojo.byId("foo"), //some div element
    "onmouseover",
    function(evt) {
    console.log("Mouse over foo!", evt);
    dojo.disconnect(handle);
    });

    如果dojo.disconnect(handle);放到connect外面,事件一次也不会触发。

    3、在循环内部建立事件连接
    下面的代码不能达到预期结果,因为匿名函数中的变量i知道函数执行时才会解析,所以console输出的结果都是10.

    for (var i=0; i < 10; i++) {
    var foo = dojo.byId("foo"+i);
    var handle = dojo.connect(foo, "onmouseover", function(evt) {
    console.log(i);
    dojo.disconnect(handle);
    });
    }

    为了解决这个问题,需要使connect执行时,匿名函数中i的值被解析出来。

    for (var i=0; i < 10; i++) {
    (function( ) {
    var foo = dojo.byId("foo"+i);
    var current_i = i; //trap in closure
    var handle = dojo.connect(foo, "onmouseover",
    function(evt) {
    console.log(current_i);
    dojo.disconnect(handle);
    }
    );
    })( ); // execute anonymous function immediately
    }

    4、通过dojo.connectPublisher,可以把没有publish出来的事件,在需要时publish出来

    function Foo( ) {
    this.greet = function( ) {
    console.log("Hi, I'm foo");
    }
    }
    function Bar( ) {
    this.greet = function( ) {
    console.log("Hi, I'm bar");
    }
    }
    var foo = new Foo;
    var bar = new Bar;
    var topic = "/dtdg/salutation";
    dojo.subscribe(topic, bar, "greet");
    dojo.connectPublisher(topic, foo, "greet");
    foo.greet( );
  • 相关阅读:
    hdoj--1162--Eddy's picture(最小生成树)
    hdoj--1087--Super Jumping! Jumping! Jumping!(贪心)
    hdoj--1051--Wooden Sticks(LIS)
    hdoj--5532--Almost Sorted Array(正反LIS)
    CodeForces--609C --Load Balancing(水题)
    poj--2631--Roads in the North(树的直径 裸模板)
    CodeForces--606A --Magic Spheres(模拟水题)
    CodeForcess--609B--The Best Gift(模拟水题)
    hdoj--1201--18岁生日(模拟)
    poj--1985--Cow Marathon(树的直径)
  • 原文地址:https://www.cnblogs.com/aiyouku/p/disconnect.html
Copyright © 2011-2022 走看看