diff --git a/lib/placeholders.js b/lib/placeholders.js index ef6d6db..54ea85f 100644 --- a/lib/placeholders.js +++ b/lib/placeholders.js @@ -37,7 +37,9 @@ global.Placeholders = { nativeSupport: nativeSupport, disable: nativeSupport ? noop : disablePlaceholders, - enable: nativeSupport ? noop : enablePlaceholders + enable: nativeSupport ? noop : enablePlaceholders, + turnOn: nativeSupport ? noop : turnOnPlaceholders, + turnOff: nativeSupport ? noop : turnOffPlaceholders, }; if ( nativeSupport ) { @@ -282,6 +284,15 @@ } } + function removeEventListener( elem, event, fn ) { + if ( elem.removeEventListener ) { + return elem.removeEventListener(event, fn, false); + } + if ( elem.detachEvent ) { + return elem.detachEvent('on' + event, fn); + } + } + // Move the caret to the index position specified. Assumes that the element // has focus. function moveCaret( elem, index ) { @@ -348,6 +359,41 @@ handleElem(node, showPlaceholder); } + function turnOnPlaceholders( node ) { + handleElem(node, newElement); + } + + function turnOffPlaceholders( node ) { + handleElem(node, turnOffPlaceholder); + } + + function turnOffPlaceholder( elem ) { + var form = elem.form; + if ( form && typeof form === 'string' ) { + + form = document.getElementById(form); + + if ( !form.getAttribute(ATTR_FORM_HANDLED) ) { + removeEventListener(form, 'submit', makeSubmitHandler(form)); + form.removeAttribute(ATTR_FORM_HANDLED); + } + } + + removeEventListener(elem, 'focus', makeFocusHandler(elem)); + removeEventListener(elem, 'blur', makeBlurHandler(elem)); + + if (hideOnInput) { + removeEventListener(elem, 'keydown', makeKeydownHandler(elem)); + removeEventListener(elem, 'keyup', makeKeyupHandler(elem)); + removeEventListener(elem, 'click', makeClickHandler(elem)); + } + + elem.removeAttribute(ATTR_EVENTS_BOUND); + elem.removeAttribute(ATTR_CURRENT_VAL); + + hidePlaceholder(elem); + } + // Hide the placeholder value on a single element. Returns true if the // placeholder was hidden and false if it was not (because it wasn't visible // in the first place).