开发者

Set text based on Form <select> value

I have the following <select> in a form:

<select style="width: 100px; text-align: center;">
  <option value="email">Email</option>
  <option value="telephone">Phone</option>
</select>

The default option is Email so the following <input> is show:

<p class="email_form">Please supply your Email Addre开发者_运维技巧ss</p>
<input onfocus="if(!this._haschanged){this.value=''};this._haschanged=true;" style="width: 270px" type="email" name="email" id="email" value="jose.gonzalez@hotmail.com">

However if they choose telephone I want to change the above to ask for a telephone number?


Fastest way would be to give the 'label' paragraph a (more generic) ID, and:

<p id="contact_method">Please supply your Email Address</p>

document.getElementById("selectId").onchange = function() {
    var value = this.options[this.selectedIndex].value;
    var p = document.getElementById("contact_method");
    if(value == 'telephone') {
        p.innerHTML = 'Please supply your phone number';
    } else {
        p.innerHTML = 'Please supply your email address';
    }
}

Try it out here: http://jsfiddle.net/29w2G/


If you’re using HTML5 anyway, why not just use the placeholder attribute for input elements instead of the input onfocus stuff? You could then use a JavaScript fallback to make it work in browsers that don’t support this yet, like this one:

/** 
 * Add this script to the end of your document that use <input autofocus type="text" /> 
 * or <input type="text" placeholder="username" /> and it'll plug support for browser
 * without these attributes
 */
(function() {

function each(list, fn) {
 var l = list.length;
 for (var i = 0; i < l; i++) {
  if (fn.call(list[i], list[i], i, list) === false) {
   break;
  }
 }
}

var addEvent = (function () {
 if (document.addEventListener) {
  return function (el, type, fn) {
   if (el && el.nodeName || el === window) {
    el.addEventListener(type, fn, false);
   } else if (el && el.length) {
    for (var i = 0; i < el.length; i++) {
     addEvent(el[i], type, fn);
    }
   }
  };
 } else {
  return function (el, type, fn) {
   if (el && el.nodeName || el === window) {
    el.attachEvent('on' + type, function() {
     return fn.call(el, window.event);
    });
   } else if (el && el.length) {
    for (var i = 0; i < el.length; i++) {
     addEvent(el[i], type, fn);
    }
   }
  };
 }
})();

var i = document.createElement('input'), 
    inputs = [].slice.call(document.getElementsByTagName('input'), 0);

inputs = inputs.concat([].slice.call(document.getElementsByTagName('textarea'), 0));

if (!('placeholder' in i)) {
 // placeholder fix
 each(inputs, function (el) {
  // note - we're using el instead of this across the board because it compresses better
  var lastValue = el.value, placeholder = el.getAttribute('placeholder');

  var focus = function () {
   if (el.value == placeholder) {
    el.value = '';
    el.style.color = '';
   }
  };

  var blur = function () {
   if (el.value == '') {
    el.value = placeholder;
    el.style.color = '#A29797';
   };
  };

  addEvent(el, 'focus', focus);
  addEvent(el, 'blur', blur);

  // remove the placeholder if the page is reload or the form is submitted
  addEvent(el.form, 'submit', function () { focus.call(el); });
  addEvent(window, 'unload', function () { focus.call(el); });

  // set the default state
  if (el.value == '') {
   blur.call(el);
  }
 });
}

if (!('autofocus' in i)) {
 // auto focus
 each(inputs, function (el) {
  if (el.getAttribute('autofocus') != null) {
   el.focus();
   return false; // "there can only be one"
  }
 });
}

})();

If you’re using jQuery, you could use my HTML5 placeholder jQuery plugin.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜