Я столкнулся с той же проблемой несколько дней назад. Когда я установил атрибут текстового поля onblur и onfocus, это не сработало. Чтобы быть точным, это работало, но я не мог видеть это, потому что это было перезаписано изменением формы модулей profile2.
Я думаю, что ваша форма alter api загружается до того, как модуль profile2 формирует alter api. Так переписывается. Я решил свою проблему, создав пользовательскую форму alter в другом пространстве имен.
function yourCustomModuleName_form_profile2_edit_testing_candidate_form_alter(&$form, &$form_state) {
$form['profile_testing_candidate']["field_candidate_name"] = array(
"#title" => "Candidate Name",
"#type" => "textfield",
"#required" => TRUE,
"#description" => t(""),
'#default_value' => 'Given Name',
'#attributes' => array (
'onblur' => "if (this.value == '') {this.value = 'Given Name'}",
'onfocus' => "if (this.value == 'Given Name') {this.value = ''}",
),
);
$form['profile_testing_candidate']["field_candidate_family_name"] = array(
"#title" => "",
"#type" => "textfield",
"#required" => FALSE,
"#description" => t(""),
'#default_value' => 'Family Name',
'#attributes' => array (
'onblur' => "if (this.value == '') {this.value = 'Family Name'}",
'onfocus' => "if (this.value == 'Family Name') {this.value = ''}",
),
);
}