Как я могу вернуть последний допустимый ввод при проверке текстового поля с помощью вызова Javascript внутри помощника Rails? - PullRequest
0 голосов
/ 21 января 2012

У меня есть текстовое поле

text_field_tag('version',version, :cols => 20 , :onchange => "validateVer(this);")

В функции Java-скрипта validateVer я проверяю, введен ли действительный float, если нет, я возвращаю по умолчанию 1.0.Как я могу вернуть предыдущее значение в текстовом поле (версия).

1 Ответ

3 голосов
/ 21 января 2012

Один из способов сделать это - сохранить последнее действительное значение в атрибуте data-:

// modify your validateVer function to return false if validation fails and true otherwise
function validateVer(elem) {
}

function changeIfValid(elem) {
  if (validateVer(elem)) {
    $(elem).data('last-valid-version', $(elem).val());
  } else {
    var lastValidVersion = $(elem).data('last-valid-version');
    if (lastValidVersion != null) {
      $(elem).val(lastValidVersion);
    } else {
      $(elem).val('1.0');
    }
  }
}

И измените текстовое поле на changeIfValid для события onChange:

text_field_tag('version', 
               version, 
               :cols => 20, 
               :onchange => "changeIfValid(this);")

РЕДАКТИРОВАТЬ: Чтобы инициализировать data-last-valid-version или установить любые другие атрибуты для text_field_tag, вы можете просто передать его как хеш-значение методу text_field_tag:

text_field_tag('version', 
               version, 
               :cols => 20, 
               "data-last-valid-version" => "A_DEFAULT_VAL",
               :onchange => "changeIfValid(this);")

Кстати, атрибуты data-* - это особенность HTML 5, а не Rails. Даже если вы используете HTML 4 или XHTML, jQuery все равно сможет их обработать.

...