0

I have a Drupal registration form with a placeholder set on a first name field. I am trying to get the form to check so that if the placeholder value is the same as the submitted value it will give an error asking them to be sure to enter their first name. Here is my code:

function mytheme_form_alter(&$form, &$form_state, $form_id){
  if ($form_id == 'user_register_form'){
    $form['field_first_name']['und'][0]['value']['#default_value'] = t('First Name');

    $form['field_first_name']['und'][0]['value']['#attributes']['onblur'] = "if (this.value == '') {this.value = 'First Name';}";
    $form['field_first_name']['und'][0]['value']['#attributes']['onfocus'] = "if (this.value == 'First Name') {this.value = '';}";
    // Alternative (HTML5) placeholder attribute instead of using the javascript
    $form['field_first_name']['und'][0]['value']['#attributes']['placeholder'] = t('First Name');

    $form['#validate'][] = 'parenting_validate_register_form';

    $form['actions']['submit']['#value'] = t('JOIN US FREE');
  }
}

function mytheme_validate_register_form(&$form, &$form_state) {
  if ($form_state['values']['field_first_name'] == 'First Name') {
    form_set_error('firstname', t('Please enter your first name.'));
  }
}

So the problem I am having is that with the above, every submission is throwing the error. Even if something other than "First Name" is entered. For some reason if ($form_state['values']['field_first_name'] == 'First Name') is returning true no matter what the "field_first_name" value is.

I've looked into using https://drupal.org/project/clientside_validation, but it just seems like overkill for what I'm trying to do.

Thanks for any help.

3
  • Setting the default value of the field is not the right way to display a placeholder. This is bound to cause problems. The placeholder attribute (which you appear to have set) is the cleanest method. A common alternative is to position the field label using eg. the jQuery Overlabel plugin. There are also several modules that provide placeholder support, eg drupal.org/project/form_placeholder Nov 26, 2013 at 10:37
  • I'll try that module. It looks good.
    – deggertsen
    Nov 26, 2013 at 21:10
  • The module drupal.org/project/form_placeholder worked great! Thank you!
    – deggertsen
    Dec 2, 2013 at 16:07

1 Answer 1

0

In your code these two lines may make issue. remove/comment these lines and try.

$form['field_first_name']['und'][0]['value']['#attributes']['onblur'] = "if (this.value == '') {this.value = 'First Name';}";
$form['field_first_name']['und'][0]['value']['#attributes']['onfocus'] = "if (this.value == 'First Name') {this.value = '';}";
1
  • Indeed, these two lines of code seem to be causing the issue. The problem is that I need to support older browsers as well and the html5 placeholder doesn't always work. @Alfred gave me a good solution in the module form_placeholder that I will try as soon as I can.
    – deggertsen
    Nov 26, 2013 at 21:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.