Constructor
new HostedFields(options)
Do not use this constructor directly. Use braintree-web.hosted-fields.create instead.
Parameters:
Name | Type | Description |
---|---|---|
options |
object |
The Hosted Fields create options. |
Methods
addClass(field, classname, callbackopt) → {Promise|void}
Add a class to a field. Useful for updating field styles when events occur elsewhere in your checkout.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
field |
string |
The field you wish to add a class to. Must be a valid fieldOption. |
|
classname |
string |
The class to be added. |
|
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the class is added successfully. |
Example
hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {
if (addClassErr) {
console.error(addClassErr);
}
});
clear(field, callbackopt) → {Promise|void}
Clear the value of a field.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
field |
string |
The field you wish to clear. Must be a valid fieldOption. |
|
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the field cleared successfully. |
Examples
hostedFieldsInstance.clear('number', function (clearErr) {
if (clearErr) {
console.error(clearErr);
}
});
hostedFieldsInstance.clear('number');
hostedFieldsInstance.clear('cvv');
hostedFieldsInstance.clear('expirationDate');
focus(field, callbackopt) → {void}
Programmatically focus a field.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
field |
string |
The field you want to focus. Must be a valid fieldOption. |
|
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the field focused successfully. |
Examples
hostedFieldsInstance.focus('number', function (focusErr) {
if (focusErr) {
console.error(focusErr);
}
});
myElement.addEventListener('click', function (e) {
// Note: In Firefox, the focus method can be suppressed
// if the element has a tabindex property or the element
// is an anchor link with an href property.
e.preventDefault();
hostedFieldsInstance.focus('number');
});
getState() → {object}
Returns an object that includes the state of all fields and possible card types.
Example
var state = hostedFieldsInstance.getState();
var formValid = Object.keys(state.fields).every(function (key) {
return state.fields[key].isValid;
});
on(event, handler) → {void}
Subscribes a handler function to a named event. event
should be blur, focus, empty, notEmpty, cardTypeChange, or validityChange. Events will emit a stateObject.
Parameters:
Name | Type | Description |
---|---|---|
event |
string |
The name of the event to which you are subscribing. |
handler |
function |
A callback to handle the event. |
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('focus', function (event) {
console.log(event.emittedBy, 'has been focused');
});
});
removeAttribute(options, callbackopt) → {Promise|void}
Removes a supported attribute from a field.
Parameters:
Name | Type | Attributes | Description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
The options for the attribute you wish to remove. Properties
|
||||||||||
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is removed successfully. |
Example
hostedFieldsInstance.removeAttribute({
field: 'number',
attribute: 'placeholder'
}, function (attributeErr) {
if (attributeErr) {
console.error(attributeErr);
}
});
removeClass(field, classname, callbackopt) → {Promise|void}
Removes a class to a field. Useful for updating field styles when events occur elsewhere in your checkout.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
field |
string |
The field you wish to remove a class from. Must be a valid fieldOption. |
|
classname |
string |
The class to be removed. |
|
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the class is removed successfully. |
Example
hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {
if (addClassErr) {
console.error(addClassErr);
return;
}
// some time later...
hostedFieldsInstance.removeClass('number', 'custom-class');
});
setAttribute(options, callbackopt) → {Promise|void}
Sets an attribute of a field.
Supported attributes are aria-invalid
, aria-required
, disabled
, and placeholder
.
Parameters:
Name | Type | Attributes | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
The options for the attribute you wish to set. Properties
|
|||||||||||||
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is set successfully. |
Examples
hostedFieldsInstance.setAttribute({
field: 'number',
attribute: 'placeholder',
value: '1111 1111 1111 1111'
}, function (attributeErr) {
if (attributeErr) {
console.error(attributeErr);
}
});
hostedFieldsInstance.setAttribute({
field: 'number',
attribute: 'aria-required',
value: true
}, function (attributeErr) {
if (attributeErr) {
console.error(attributeErr);
}
});
setMessage(options) → {void}
Sets a visually hidden message (for screenreaders) on a field.
Parameters:
Name | Type | Description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
The options for the attribute you wish to set. Properties
|
Examples
hostedFieldsInstance.setMessage({
field: 'number',
message: 'Invalid card number'
});
hostedFieldsInstance.setMessage({
field: 'number',
message: ''
});
setPlaceholder(field, placeholder, callbackopt) → {Promise|void}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
field |
string |
The field whose placeholder you wish to change. Must be a valid fieldOption. |
|
placeholder |
string |
Will be used as the |
|
callback |
callback |
<optional> |
Callback executed on completion, containing an error if one occurred. No data is returned if the placeholder updated successfully. |
- Deprecated:
-
- since version 3.8.0. Use setAttribute instead.
- Source:
teardown(callbackopt) → {Promise|void}
Cleanly remove anything set up by create.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
callback |
callback |
<optional> |
Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, |
Example
hostedFieldsInstance.teardown(function (teardownErr) {
if (teardownErr) {
console.error('Could not tear down Hosted Fields!');
} else {
console.info('Hosted Fields has been torn down!');
}
});
tokenize(optionsopt, callbackopt) → {Promise|void}
Tokenizes fields and returns a nonce payload.
Parameters:
Name | Type | Attributes | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
<optional> |
All tokenization options for the Hosted Fields component. Properties
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
callback |
callback |
<optional> |
The second argument, |
Examples
hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {
if (tokenizeErr) {
switch (tokenizeErr.code) {
case 'HOSTED_FIELDS_FIELDS_EMPTY':
// occurs when none of the fields are filled in
console.error('All fields are empty! Please fill out the form.');
break;
case 'HOSTED_FIELDS_FIELDS_INVALID':
// occurs when certain fields do not pass client side validation
console.error('Some fields are invalid:', tokenizeErr.details.invalidFieldKeys);
break;
case 'HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE':
// occurs when:
// * the client token used for client authorization was generated
// with a customer ID and the fail on duplicate payment method
// option is set to true
// * the card being tokenized has previously been vaulted (with any customer)
// See: https://developers.braintreepayments.com/reference/request/client-token/generate/#options.fail_on_duplicate_payment_method
console.error('This payment method already exists in your vault.');
break;
case 'HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED':
// occurs when:
// * the client token used for client authorization was generated
// with a customer ID and the verify card option is set to true
// and you have credit card verification turned on in the Braintree
// control panel
// * the cvv does not pass verfication (https://developers.braintreepayments.com/reference/general/testing/#avs-and-cvv/cid-responses)
// See: https://developers.braintreepayments.com/reference/request/client-token/generate/#options.verify_card
console.error('CVV did not pass verification');
break;
case 'HOSTED_FIELDS_FAILED_TOKENIZATION':
// occurs for any other tokenization error on the server
console.error('Tokenization failed server side. Is the card valid?');
break;
case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':
// occurs when the Braintree gateway cannot be contacted
console.error('Network error occurred when tokenizing.');
break;
default:
console.error('Something bad happened!', tokenizeErr);
}
} else {
console.log('Got nonce:', payload.nonce);
}
});
hostedFieldsInstance.tokenize({
vault: true
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
hostedFieldsInstance.tokenize({
cardholderName: 'First Last'
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
hostedFieldsInstance.tokenize({
billingAddress: {
postalCode: '11111'
}
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
hostedFieldsInstance.tokenize({
billingAddress: {
firstName: 'First',
lastName: 'Last',
company: 'Company',
streetAddress: '123 Street',
extendedAddress: 'Unit 1',
// passing just one of the country options is sufficient to
// associate the card details with a particular country
// valid country names and codes can be found here:
// https://developers.braintreepayments.com/reference/general/countries/ruby#list-of-countries
countryName: 'United States',
countryCodeAlpha2: 'US',
countryCodeAlpha3: 'USA',
countryCodeNumeric: '840'
}
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
Type Definitions
hostedFieldsCard :object
Information about the card type, sent in stateObjects.
Properties:
Name | Type | Description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
type |
string |
The code-friendly representation of the card type. It will be one of the following strings:
|
|||||||||
niceType |
string |
The pretty-printed card type. It will be one of the following strings:
|
|||||||||
code |
object |
This object contains data relevant to the security code requirements of the card brand.
For example, on a Visa card there will be a Properties
|
hostedFieldsFieldData :object
Data about Hosted Fields fields, sent in stateObjects.
Properties:
Name | Type | Description |
---|---|---|
container |
HTMLElement |
Reference to the container DOM element on your page associated with the current event. |
isFocused |
boolean |
Whether or not the input is currently focused. |
isEmpty |
boolean |
Whether or not the user has entered a value in the input. |
isPotentiallyValid |
boolean |
A determination based on the future validity of the input value.
This is helpful when a user is entering a card number and types |
isValid |
boolean |
Whether or not the value of the associated input is fully qualified for submission. |
stateObject :object
Properties:
Name | Type | Description | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cards |
Array.<HostedFields~hostedFieldsCard> |
This will return an array of potential cards. If the card type has been determined, the array will contain only one card. Internally, Hosted Fields uses credit-card-type, an open-source card detection library. |
||||||||||||||||||||||||||||
emittedBy |
string |
The name of the field associated with an event. This will not be included if returned by getState. It will be one of the following strings:
|
||||||||||||||||||||||||||||
fields |
object |
Properties
|
tokenizePayload :object
Properties:
Name | Type | Description | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nonce |
string |
The payment method nonce. |
||||||||||||||||||||||||||||||
details |
object |
Additional account details. Properties
|
||||||||||||||||||||||||||||||
description |
string |
A human-readable description. |
||||||||||||||||||||||||||||||
type |
string |
The payment method type, always |
||||||||||||||||||||||||||||||
binData |
object |
Information about the card based on the bin. Properties
|
Events
blur :HostedFields~stateObject
This event is emitted when a field loses focus.
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('blur', function (event) {
console.log(event.emittedBy, 'lost focus');
});
});
cardTypeChange :HostedFields~stateObject
This event is emitted when activity within the number field has changed such that the possible card type has changed.
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('cardTypeChange', function (event) {
if (event.cards.length === 1) {
console.log(event.cards[0].type);
} else {
console.log('Type of card not yet known');
}
});
});
empty :HostedFields~stateObject
This event is emitted when a field transitions from having data to being empty.
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('empty', function (event) {
console.log(event.emittedBy, 'is now empty');
});
});
focus :HostedFields~stateObject
This event is emitted when a field gains focus.
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('focus', function (event) {
console.log(event.emittedBy, 'gained focus');
});
});
inputSubmitRequest :HostedFields~stateObject
This event is emitted when the user requests submission of an input field, such as by pressing the Enter or Return key on their keyboard, or mobile equivalent.
Example
var hostedFields = require('braintree-web/hosted-fields');
var submitButton = document.querySelector('input[type="submit"]');
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('inputSubmitRequest', function () {
// User requested submission, e.g. by pressing Enter or equivalent
submitButton.click();
});
});
notEmpty :HostedFields~stateObject
This event is emitted when a field transitions from being empty to having data.
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('notEmpty', function (event) {
console.log(event.emittedBy, 'is now not empty');
});
});
validityChange :HostedFields~stateObject
This event is emitted when the validity of a field has changed. Validity is represented in the stateObject as two booleans: isValid
and isPotentiallyValid
.
Example
hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {
hostedFieldsInstance.on('validityChange', function (event) {
var field = event.fields[event.emittedBy];
if (field.isValid) {
console.log(event.emittedBy, 'is fully valid');
} else if (field.isPotentiallyValid) {
console.log(event.emittedBy, 'is potentially valid');
} else {
console.log(event.emittedBy, 'is not valid');
}
});
});