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);
}
});
Clear several fields
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);
}
});
Using an event listener
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
Check if all fields are valid
var state = hostedFields.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
Listening to a Hosted Field event, in this case 'focus'
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
Remove the placeholder attribute of a field
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
Set the placeholder attribute of a field
hostedFieldsInstance.setAttribute({
field: 'number',
attribute: 'placeholder',
value: '1111 1111 1111 1111'
}, function (attributeErr) {
if (attributeErr) {
console.error(attributeErr);
}
});
Set the aria-required attribute of a field
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
Set an error message on a field
hostedFieldsInstance.setMessage({
field: 'number',
message: 'Invalid card number'
});
Remove the message on a field
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
Tokenize a card
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);
}
});
Tokenize and vault a card
hostedFieldsInstance.tokenize({
vault: true
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
Tokenize a card with cardholder name
hostedFieldsInstance.tokenize({
cardholderName: 'First Last'
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
Tokenize a card with the postal code option
hostedFieldsInstance.tokenize({
billingAddress: {
postalCode: '11111'
}
}, function (tokenizeErr, payload) {
if (tokenizeErr) {
console.error(tokenizeErr);
} else {
console.log('Got nonce:', payload.nonce);
}
});
Tokenize a card with additional billing address options
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
Listening to a blur event
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
Listening to a cardTypeChange event
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
Listening to an empty event
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
Listening to a focus event
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
Clicking a submit button upon hitting Enter (or equivalent) within a Hosted Field
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
Listening to an notEmpty event
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
Listening to a validityChange event
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');
}
});
});