diff options
| author | Misko Hevery | 2010-03-24 16:47:11 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2010-03-24 16:47:11 -0700 | 
| commit | f29f6a47c4d81c5b8e365a3dae307159f1b12968 (patch) | |
| tree | 0f0c98e1a5effc60fc61c7908b4e6870c729c290 | |
| parent | 0c42eb9909d554807549cd3394e0ea0c715cc2d1 (diff) | |
| download | angular.js-f29f6a47c4d81c5b8e365a3dae307159f1b12968.tar.bz2 | |
fixed .value vs attr(value) access
| -rw-r--r-- | src/Angular.js | 1 | ||||
| -rw-r--r-- | src/jqLite.js | 7 | ||||
| -rw-r--r-- | src/widgets2.js | 27 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 32 | 
4 files changed, 49 insertions, 18 deletions
diff --git a/src/Angular.js b/src/Angular.js index b76926b9..dc530921 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -44,7 +44,6 @@ function extensionList(angular, name) {  }  var consoleNode, msie, -    VALUE             = 'value',      NOOP              = 'noop',      jQuery            = window['jQuery'] || window['$'], // weirdness to make IE happy      slice             = Array.prototype.slice, diff --git a/src/jqLite.js b/src/jqLite.js index 2ac3f6c9..2132bfc1 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -179,6 +179,13 @@ JQLite.prototype = {      return this[0].textContent;    }, +  val: function(value) { +    if (isDefined(value)) { +      this[0].value = value; +    } +    return this[0].value; +  }, +    html: function(value) {      if (isDefined(value)) {        this[0].innerHTML = value; diff --git a/src/widgets2.js b/src/widgets2.js index cee0e49e..5425b5a4 100644 --- a/src/widgets2.js +++ b/src/widgets2.js @@ -36,23 +36,22 @@ function domAccessor(element) {      return value;    }    return { -    get: function(){ -      return validate(element.attr(VALUE)); -    }, -    set: function(value){ -      element.attr(VALUE, validate(value)); -    } +    get: function(){ return validate(element.val()); }, +    set: function(value){ element.val(validate(value)); }    };  }  var NG_ERROR = 'ng-error',      NG_VALIDATION_ERROR = 'ng-validation-error', +    TEXT_META = ['', 'keyup change'],      INPUT_META = { -  'text': ["", 'keyup change'] -}; +      'text':     TEXT_META, +      'textarea': TEXT_META, +      'hidden':   TEXT_META, +      'password': TEXT_META +    }; -angularWidget('INPUT', function input(element){ -  var meta = INPUT_META[lowercase(element.attr('type'))]; +function inputWidget(meta) {    return meta ? function(element) {      var scope = scopeAccessor(this, element),          dom = domAccessor(element); @@ -62,6 +61,14 @@ angularWidget('INPUT', function input(element){      });      this.$watch(scope.get, dom.set);    } : 0; +} + +angularWidget('INPUT', function input(element){ +  return inputWidget(INPUT_META[lowercase(element[0].type)]); +}); + +angularWidget('TEXTAREA', function(){ +  return inputWidget(INPUT_META['text']);  }); diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index da9d5f9b..aeb7a613 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -25,13 +25,13 @@ describe("input widget", function(){      scope.set('name', 'Adam');      scope.updateView(); -    expect(element.attr('value')).toEqual("Adam"); +    expect(element.val()).toEqual("Adam"); -    element.attr('value', 'Shyam'); +    element.val('Shyam');      element.trigger('keyup');      expect(scope.get('name')).toEqual('Shyam'); -    element.attr('value', 'Kai'); +    element.val('Kai');      element.trigger('change');      expect(scope.get('name')).toEqual('Kai');    }); @@ -42,9 +42,9 @@ describe("input widget", function(){      scope.set('list', ['x', 'y', 'z']);      scope.updateView(); -    expect(element.attr('value')).toEqual("x, y, z"); +    expect(element.val()).toEqual("x, y, z"); -    element.attr('value', '1, 2, 3'); +    element.val('1, 2, 3');      element.trigger('keyup');      expect(scope.get('list')).toEqual(['1', '2', '3']);    }); @@ -59,7 +59,7 @@ describe("input widget", function(){      expect(element.hasClass('ng-validation-error')).toBeFalsy();      expect(element.attr('ng-error')).toBeFalsy(); -    element.attr('value', 'x'); +    element.val('x');      element.trigger('keyup');      expect(element.hasClass('ng-validation-error')).toBeTruthy();      expect(element.attr('ng-error')).toEqual('Not a number'); @@ -75,10 +75,28 @@ describe("input widget", function(){      expect(element.hasClass('ng-validation-error')).toBeFalsy();      expect(element.attr('ng-error')).toBeFalsy(); -    element.attr('value', ''); +    element.val('');      element.trigger('keyup');      expect(element.hasClass('ng-validation-error')).toBeTruthy();      expect(element.attr('ng-error')).toEqual('Required');    }); +  it("should process ng-required", function() { +    compile('<textarea name="name">Misko</textarea>'); +    expect(scope.get('name')).toEqual("Misko"); + +    scope.set('name', 'Adam'); +    scope.updateView(); +    expect(element.val()).toEqual("Adam"); + +    element.val('Shyam'); +    element.trigger('keyup'); +    expect(scope.get('name')).toEqual('Shyam'); + +    element.val('Kai'); +    element.trigger('change'); +    expect(scope.get('name')).toEqual('Kai'); +  }); + +  });  | 
