JavaScript autoPopulate 0.1 - 使用书签自动填充表单字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript autoPopulate 0.1 - 使用书签自动填充表单字段相关的知识,希望对你有一定的参考价值。

(function() {
  var data = {
    // personal details
  	'forename': {
  		'expression': /^(delivery|billing|card)?_?(fore|first)_?name$/i,
  		'value': [
  		  'Bob',
  		  'Alice'
  		]
  	},
  	'surname': {
  		'expression': /^(delivery|billing|card)?_?(sur|family|last)_?name$/i,
  		'value': [
  		  'Tester',
  		  'O\'Test' // test for quote acceptance
  		]
  	},
  	'company': {
  	  'expression': /^(delivery|billing|card)?_?(company|business|organisation)_?(name)?$/i,
  	  'value': [
  	    'Test Ltd.',
  	    'Test O\'Sites Ltd.',
  	    'Test "Testing" Ltd.'
  	  ]
  	},
  	'email': {
  		'expression': /^(confirm)?_?email_?(address|confirm)?$/i,
  		'value': 'test.user@testdomain.co.uk'
  	},

  	// address details
  	'house_number': {
			'expression': /^(delivery|billing|card)?_?(house|street|building)_?(num(ber)?|no)?$/i,
  		'value': '45'
  	},
  	'address1': {
  		'expression': /^(delivery|billing|card)?_?address_?1$/i,
  		'value': [
  		  '45 Test Road',
  		  '"Test House", 45 Test Road',
  		  '\'Test House\', 45 Test Road'
  		]
  	},
  	'address2': {
  		'expression': /^(delivery|billing|card)?_?address_?2$/i,
  		'value': 'Teston'
  	},
  	'town': {
  		'expression': /^(delivery|billing|card)?_?(town|city|address_?3)$/i,
  		'value': 'Testville'
  	},
  	'county': {
  		'expression': /^(delivery|billing|card)?_?(county|state|address_?4)$/i,
  		'value': 'Testshire'
  	},
  	'postcode': {
  		'expression': /^(delivery|billing|card)?_?(post(al)?|zip)_?code$/i,
  		'value': [
  		  'WR2 6NJ' // postcode anywhere test postcode - no charge for testing!
  		]
  	},
    'country': {
      'expression': /^(delivery|billing|card)?_?country$/i,
      'value': [
        'United Kingdom',
        'Great Britain',
        'England',
        'UK'
      ]
    },

    // contact details
		'phone': {
			'expression': /^(delivery|billing|card)?_?((tele?)?phone|tel)_?(num(ber)?|no)?$/i,
			'value': '01234 567 890'
		},
		'mobile': {
			'expression': /^mob(ile)?_?(num(ber)?|no)?$/i,
			'value': '07777 123 456'
		},
		'fax': {
			'expression': /^(fax|facsimile)_?(num(ber)?|no)?$/i,
			'value': '01234 567 891'
		},

    // date of birth
    'dob_day': {
      'expression': /^d(a?te)?_?of?_?b(irth)?_?d(a?y)?$/i,
      'value': 1
    },
    'dob_month': {
      'expression': /^d(a?te)?_?of?_?b(irth)?_?m((on)?th)?$/i,
      'value': 1
    },
    'dob_year': {
      'expression': /^d(a?te)?_?of?_?b(irth)?_?y(ear|r)?$/i,
      'value': 1980
    },

    // card details
    'card_number': {
      'expression': /^(credit|debit)?_?card_?(num(ber)?|no)?$/i,
      'value': '4929 0000 0000 6'
    },
    'card_valid_month': {
      'expression': /^(credit|debit)?_?(card)?_?(start|valid_?(from)?)_?month$/i,
      'value': '01'
    },
    'card_valid_year': {
      'expression': /^(credit|debit)?_?(card)?_?(start|valid_?(from)?)_?year$/i,
      'value': '2010'
    },
    'card_expiry_month': {
      'expression': /^(credit|debit)?_?(card)?_?expiry_?month$/i,
      'value': '12'
    },
    'card_expiry_year': {
      'expression': /^(credit|debit)?_?(card)?_?expiry_?year$/i,
      'value': '2015'
    },
    'security_code': {
      'expression': /^(credit|debit)?_?(card)?_?(verification|cv2|security)?_?code$/i,
      'value': '123'
    },

    // message/notes
    'message': {
      'expression': /^(message|(delivery|billing|card)?_?notes?|info(rmation)?|comments?)$/i,
      'value': 'This is a test.'
    },

    // concatenation
    'name': {
      'expression': /^(full|delivery|billing|card)?_?(name(_?on_?card)?|cardholder)$/i,
      'combine': [
        'forename',
        'surname'
      ],
      'separator': ' '
    },
    'address': {
      'expression': /^(delivery|billing|card)?_?address$/i,
      'combine': [
        'address1',
        'address2',
        'town'
      ],
      'separator': ', '
    },
    'dob': {
      'expression': /^d(ate)?_?of?_?b(irth)?$/i,
      'combine': [
        'dob_day',
        'dob_month',
        'dob_year'
      ],
      'separator': '/'
    },
    'card_valid': {
      'expression': /^(credit|debit)?_?(card)?_?(start|valid_?(from)?)y_?(da?te)?$/i,
      'combine': [
        'card_valid_month',
        'card_valid_year'
      ],
      'separator': ''
    },
    'card_expiry': {
      'expression': /^(credit|debit)?_?(card)?_?expiry_?(da?te)?$/i,
      'combine': [
        'card_expiry_month',
        'card_expiry_year'
      ],
      'separator': ''
    }
  };

  var concatFields = function(values, separator, data) {
    var r = [];

    for (var i = 0; i < values.length; i++) {
      if (values[i] in data) {
        var field = data[values[i]];

        if ('value' in field) {
          var value = field.value;

          if (typeof(value) == 'string') {
            if (value.length > 0) {
              r.push(value);
            }

          } else if (value.length) {
            var key = Math.floor(Math.random() * value.length);

            if (value[key].length > 0) {
              r.push(value[key]);
            }
          }

        } else if ('combine' in field && 'separator' in field) {
          r.push(concatFields(field.combine, field.separator, data));
        }
      }
    }

    return r.join(separator);
  }

  if (document.querySelectorAll) {
    var elements = document.querySelectorAll('input, textarea, select');

  } else {
    var elements = [];

    elements = elements.concat(document.getElementsByTagName('input'), document.getElementsByTagName('textarea'), document.getElementsByTagName('select'));
  }

  for (var i = 0; i < elements.length; i++) {
    var name = (elements[i].name ? elements[i].name : elements[i].id);

    for (var key in data) {
      var field = data[key];

      if (name.match(field.expression)) {
        var value = (('combine' in field && 'separator' in field) ? concatFields(field.combine, field.separator, data) : (('value' in field) ? field.value : false));

        if (value !== false) {
          if (elements[i].tagName.toLowerCase() == 'select') {
            for (var j = 0; j < elements[i].options.length; j++) {
              if (typeof(value) == 'string' || typeof(value) == 'number') {
                if (elements[i].options[j].value == value || elements[i].options[j].text == value) {
                  elements[i].selectedIndex = j;

                  break;
                }

              } else if (value.length) {
                if (value.indexOf(elements[i].options[j].value) > -1 || value.indexOf(elements[i].options[j].text) > -1) {
                  elements[i].selectedIndex = j;

                  break;
                }
              }
            }

          } else if (elements[i].tagName.toLowerCase() == 'input' && (elements[i].type == 'checkbox' || elements[i].type == 'radio')) {
            if (elements[i].value == value) {
              elements[i].checked = true;

            } else {
              elements[i].checked = false;
            }

          } else {
            if (typeof(value) == 'string' || typeof(value) == 'number') {
              elements[i].value = value;

            } else if (value.length) {
              elements[i].value = value[Math.floor(Math.random() * value.length)];
            }
          }

          elements[i].blur();
        }

        continue;
      }
    }
  }
})();

以上是关于JavaScript autoPopulate 0.1 - 使用书签自动填充表单字段的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 图形JavaScript框架,版本0.0.1

javascript:;与 javascript:void(0);

JavaScript中的两个“0” -0和+0

如何解决JavaScript中0.1+0.2不等于0.3

如何解决JavaScript中0.1+0.2不等于0.3

解决JavaScript中0.1+0.2不等于0.3问题