Функция на 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, время: 19:03. |