Функция на JavaScrept
Написана вот такая функция:
var first=true; function VerchReg(newsymbol) { var re = /[0-9А-Яа-я-" "]/;//Вводятся только цифры,кириллица - и пробел if (re.test(newsymbol)) { if (newsymbol==" ") { first=true; return newsymbol; } if (first) { first=false; return newsymbol.toUpperCase(); } else { return newsymbol; } } else { return ""; } } взаимодействует вот с этим кодом <text>Всё сразу в верхний регистр</text> </value> </caption> <event activity="change" name="event__change"> <script contentType="application/x-javascript"> if (xfa.event.newText.length > xfa.event.prevText.length && xfa.event.change.length == 1) { xfa.event.change = xfa.form.topmostSubform.variables.Validation.Verch Reg(xfa.event.change); } else { xfa.event.change = ""; } </script> разрабатывается все в среде LiveDesigner задача кода - при вводе в поле символов в нижнем регистре в поле сразу на вводе первые символы каждого слова отображаются с заглавной буквы. Пример - вод осуществляется "иванов иван иванович" в поле сразу появляется "Иванов Иван Иванович". Весь этот код в принципе работает, но есть нюанс. Проблема в том, что если повторно в поле производить редактирование, то есть убрать Иванов Иван Иванович и начать печатать вновь "петров петр петрович" появляется "петров Петр Петрович" это один вариант. Второй - если перезагрузить форму, то все опять работает нормально. И третий вариант - ввели "иван иванович иванов" сразу появляется "Иванов Иван Иванович", возвращаем курсор в начало поля, делаем пробел, опять курсор в начало поля и вводим в нижнем регистре "петров петр петрович" то отображается "Петров Петр Петрович" в итоге в поле "Иванов Иван Иванович Петров Петр Петрович". В чем проблема? Кто поможет? |
Цитата:
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <form onsubmit="return false"> <input id="input" size="50"/> <button type="submit">Отправить</button> <script> (function(){ var input = document.getElementById('input'); input['oninput' in input ? 'oninput' : 'onpropertychange'] = function() { var str = this.value, reg =/[^-а-яё\d\s]/g, regUp =/(^|\s)(\S)/g; str = str.toLowerCase().replace(reg, ''); str = str.replace(regUp, function g(a, b, c) { return b + c.toUpperCase() }); this.value = str ; }; })(); </script> </form> </body> </html> |
Да, работает нормально, но отображение в поле при вводе в нижнем регистре "иванов иван иванович" и остается в нижнем и лишь после потери полем фокуса, появляется "Иванов Иван Иванович", а надо чтобы сразу при вводе преобразовывалось в "Иванов Иван Иванович"
|
Цитата:
|
Вы знаете, я не спец в скриптах. Форма у меня для Adobe Acrobat 10 версии. В дополнении к Adobe Acrobat идет LiveDesigner (для разработки форм), в этом LiveDesigner я сделал форму. Я знаю, что в Acrobat сделать, то что я хочу (изменения на вводе) нельзя, а в LiveDesigner можно. LiveDesigner в xml коде. Делаю я вот так:
<text>Всё сразу в верхний регистр</text> </value> </caption> <event activity="change" name="event__change"> <script contentType="application/x-javascript"> if (xfa.event.newText.length > xfa.event.prevText.length && xfa.event.change.length == 1) { xfa.event.change = xfa.form.topmostSubform.variables.Validation.VseVerch(xfa.event.change); } else { xfa.event.change = ""; } </script> </desc> <?templateDesigner Hyphenation excludeInitialCap:1, excludeAllCaps:1, wordCharCnt:7, remainCharCnt:3, pushCharCnt:3?> <variables> <script contentType="application/x-javascript" name="Validation"> function VseVerch() { var input = document.getElementById('input'); input['oninput' in input ? 'oninput' : 'onpropertychange'] = function() { var str = this.value, reg =/[^-а-яё\d\s]/g, regUp =/(^|\s)(\S)/g; str = str.toLowerCase().replace(reg, ''); str = str.replace(regUp, function g(a, b, c) { return b + c.toUpperCase() }); this.value = str ; }; }(); </script> <?templateDesigner expand 1?></variables> <?templateDesigner expand 1?></subform> <?templateDesigner DefaultPreviewDynamic 1?> <?templateDesigner DefaultRunAt client?> <?templateDesigner Grid show:1, snap:1, units:1, color:ff8080, origin:(0,0), interval:(125000,125000)?> <?templateDesigner DefaultLanguage JavaScript?> но что-то как надо не работает. |
BSI,
про Acrobat неподскажу - можно только ['oninput' in input ? 'oninput' : 'onpropertychange'] на .onkeyup попробовать поменять или добавить |
Большое спасибо за помощь, но работать не хочет.
Вот с этой функцией работает, но при первом открытии формы, при редактировании поля выводит иванов Иван Иванович. var first=true; function VerchReg(newsymbol) { var re = /[0-9А-Яа-я-" "]/;//Вводятся только цифры,кириллица - и пробел if (re.test(newsymbol)) { if (newsymbol==" ") { first=true; return newsymbol; } if (first) { first=false; return newsymbol.toUpperCase(); } else { return newsymbol; } } else { return ""; } } |
иванов иван иванович и так знает что он Иванов Иван Иванович. Ему доказывать не надо. Надо просто записать в док Иванов Иван Иванович, если Иванову Ивану Ивановичу было лень нажимать шифт.
|
Некоторые любители печатают так ИВАНОВ ИВАН ИВАНОВИЧ, в документе надо так Иванов Иван Иванович и не как иначе (такое условие). Вот Ваш скрипт и решает эту проблему. Только пока не могу его правильно применить в своей форме. Еще раз спасибо за принятое участие в моей проблеме.
|
Часовой пояс GMT +3, время: 18:04. |