Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция на JavaScrept (https://javascript.ru/forum/misc/45408-funkciya-na-javascrept.html)

BSI 27.02.2014 14:59

Функция на 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 &gt; xfa.event.prevText.length &amp;&amp; xfa.event.change.length == 1)
{
xfa.event.change = xfa.form.topmostSubform.variables.Validation.Verch Reg(xfa.event.change);
}
else
{
xfa.event.change = "";
}
</script>

разрабатывается все в среде LiveDesigner

задача кода - при вводе в поле символов в нижнем регистре в поле сразу на вводе первые символы каждого слова отображаются с заглавной буквы. Пример - вод осуществляется "иванов иван иванович" в поле сразу появляется "Иванов Иван Иванович".
Весь этот код в принципе работает, но есть нюанс. Проблема в том, что если повторно в поле производить редактирование, то есть убрать Иванов Иван Иванович и начать печатать вновь "петров петр петрович" появляется "петров Петр Петрович" это один вариант. Второй - если перезагрузить форму, то все опять работает нормально. И третий вариант - ввели "иван иванович иванов" сразу появляется "Иванов Иван Иванович", возвращаем курсор в начало поля, делаем пробел, опять курсор в начало поля и вводим в нижнем регистре "петров петр петрович" то отображается "Петров Петр Петрович" в итоге в поле "Иванов Иван Иванович Петров Петр Петрович".

В чем проблема? Кто поможет?

рони 27.02.2014 16:00

Цитата:

Сообщение от BSI
первые символы каждого слова отображаются с заглавной буквы

вашим LiveDesigner необучен но на js можно так
<!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>

BSI 27.02.2014 16:16

Да, работает нормально, но отображение в поле при вводе в нижнем регистре "иванов иван иванович" и остается в нижнем и лишь после потери полем фокуса, появляется "Иванов Иван Иванович", а надо чтобы сразу при вводе преобразовывалось в "Иванов Иван Иванович"

рони 27.02.2014 16:49

Цитата:

Сообщение от BSI
отображение в поле при вводе в нижнем регистре "иванов иван иванович" и остается в нижнем и лишь после потери полем фокуса

и в каком это браузере?

BSI 27.02.2014 17:27

Вы знаете, я не спец в скриптах. Форма у меня для 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 &gt; xfa.event.prevText.length &amp;&amp; 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?>


но что-то как надо не работает.

рони 27.02.2014 17:32

BSI,
про Acrobat неподскажу - можно только ['oninput' in input ? 'oninput' : 'onpropertychange'] на .onkeyup попробовать поменять или добавить

BSI 27.02.2014 18:06

Большое спасибо за помощь, но работать не хочет.
Вот с этой функцией работает, но при первом открытии формы, при редактировании поля выводит иванов Иван Иванович.
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 "";
}
}

kostyanet 28.02.2014 11:58

иванов иван иванович и так знает что он Иванов Иван Иванович. Ему доказывать не надо. Надо просто записать в док Иванов Иван Иванович, если Иванову Ивану Ивановичу было лень нажимать шифт.

BSI 28.02.2014 13:08

Некоторые любители печатают так ИВАНОВ ИВАН ИВАНОВИЧ, в документе надо так Иванов Иван Иванович и не как иначе (такое условие). Вот Ваш скрипт и решает эту проблему. Только пока не могу его правильно применить в своей форме. Еще раз спасибо за принятое участие в моей проблеме.


Часовой пояс GMT +3, время: 19:12.