diff options
| author | Misko Hevery | 2010-07-27 15:54:50 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2010-07-27 15:54:50 -0700 | 
| commit | 2a30a02f015dd54846bb62d1f05e82b3cf76ef9f (patch) | |
| tree | 91b380dd30bb1565048e8e644e397b6cca0ccde4 | |
| parent | 8ddee9bb25ade2bbe7d57db6353b29867606c184 (diff) | |
| download | angular.js-2a30a02f015dd54846bb62d1f05e82b3cf76ef9f.tar.bz2 | |
fix preventDefault for events
| -rw-r--r-- | example/temp.html | 7 | ||||
| -rw-r--r-- | scenario/widgets.html | 8 | ||||
| -rw-r--r-- | src/directives.js | 4 | ||||
| -rw-r--r-- | src/jqLite.js | 15 | ||||
| -rw-r--r-- | src/widgets.js | 5 | ||||
| -rw-r--r-- | test/directivesSpec.js | 14 | 
6 files changed, 27 insertions, 26 deletions
| diff --git a/example/temp.html b/example/temp.html index 337f7fba..f21d3f5c 100644 --- a/example/temp.html +++ b/example/temp.html @@ -1,10 +1,15 @@  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  <html>    <head> +    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>      <script type="text/javascript"           src="../src/angular-bootstrap.js#autobind"></script>    </head>    <body ng:init="$window.$root = this"> -    Hello {{'World'}}! +    <div ng:click="$window.alert('outter')"> +      outter +      <div ng:click="$window.alert('inner')">inner</div> +      <a href="#ERROR" ng:click="$window.alert('link')">link</a> +    </div>    </body>  </html> diff --git a/scenario/widgets.html b/scenario/widgets.html index 2626843d..d5285ea6 100644 --- a/scenario/widgets.html +++ b/scenario/widgets.html @@ -72,12 +72,12 @@        </tr>        <tr><th colspan="3">Buttons</th></tr>        <tr> -        <td>ng-change<br/>ng:click</td> +        <td>ng:change<br/>ng:click</td>          <td ng:init="button.count = 0">            <form> -           <input type="button" value="button" ng-change="button.count = button.count + 1"/> <br/> -           <input type="submit" value="submit" ng-change="button.count = button.count + 1"/><br/> -           <input type="image" src="" ng-change="button.count = button.count + 1"/><br/> +           <input type="button" value="button" ng:change="button.count = button.count + 1"/> <br/> +           <input type="submit" value="submit" ng:change="button.count = button.count + 1"/><br/> +           <input type="image" src="" ng:change="button.count = button.count + 1"/><br/>             <a href=""   ng:click="button.count = button.count + 1">action</a>            </form>          </td> diff --git a/src/directives.js b/src/directives.js index ffe37890..9aadbd11 100644 --- a/src/directives.js +++ b/src/directives.js @@ -199,10 +199,10 @@ angularWidget("@ng:repeat", function(expression, element){  angularDirective("ng:click", function(expression, element){    return function(element){      var self = this; -    element.bind('click', function(){ +    element.bind('click', function(event){        self.$tryEval(expression, element);        self.$root.$eval(); -      return false; +      event.preventDefault();      });    };  }); diff --git a/src/jqLite.js b/src/jqLite.js index cff9ae00..26ca6dea 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -104,19 +104,12 @@ JQLite.prototype = {        eventHandler = bind[type];        if (!eventHandler) {          bind[type] = eventHandler = function(event) { -          var bubbleEvent = false; +          if (!event.preventDefault) { +            event.returnValue = false; +          }            foreach(eventHandler.fns, function(fn){ -            bubbleEvent = bubbleEvent || fn.call(self, event); +            fn.call(self, event);            }); -          if (!bubbleEvent) { -            if (msie) { -              event.returnValue = false; -              event.cancelBubble = true; -            } else { -              event.preventDefault(); -              event.stopPropagation(); -            } -          }          };          eventHandler.fns = [];          addEventListener(element, type, eventHandler); diff --git a/src/widgets.js b/src/widgets.js index 5f0fcf7c..87a302fa 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -198,14 +198,15 @@ function inputWidget(events, modelAccessor, viewAccessor, initFn) {      this.$eval(element.attr('ng:init')||'');      // Don't register a handler if we are a button (noopAccessor) and there is no action      if (action || modelAccessor !== noopAccessor) { -      element.bind(events, function(){ +      element.bind(events, function(event){          model.set(view.get());          lastValue = model.get();          scope.$tryEval(action, element);          scope.$root.$eval();          // if we have noop initFn than we are just a button,          // therefore we want to prevent default action -        return initFn != noop; +        if(initFn == noop) +          event.preventDefault();        });      }      view.set(lastValue = model.get()); diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 8a7da41d..278f9c4c 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -160,13 +160,15 @@ describe("directives", function(){      expect(scope.$get('count')).toEqual(1);    }); -  it('should ng:click', function(){ -    var scope = compile('<div ng:click="clicked = true"></div>'); -    scope.$eval(); -    expect(scope.$get('clicked')).toBeFalsy(); +  describe('ng:click', function(){ +    it('should fire event', function(){ +      var scope = compile('<div ng:click="clicked = true"></div>'); +      scope.$eval(); +      expect(scope.$get('clicked')).toBeFalsy(); -    element.trigger('click'); -    expect(scope.$get('clicked')).toEqual(true); +      element.trigger('click'); +      expect(scope.$get('clicked')).toEqual(true); +    });    });    it('should ng:class', function(){ | 
