mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-28 20:10:29 +00:00
fixed .value vs attr(value) access
This commit is contained in:
parent
0c42eb9909
commit
f29f6a47c4
4 changed files with 49 additions and 18 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
});
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue