@cicatrix
было бы большой ошибкой думать

Как получить непечатный символ через веб-форму?

Суть в следующем: есть веб-форма на ASP.Net WebForms, где есть TextBox, в который клиенту необходимо отсканировать штрихкод (GS1 Databar).
В штрихкоде согласно спецификации присутствует символ FNC1 (0x1D) ASCII Group Separator (непечатный).
Проблема в том, что сканнер при сканировании имитирует нажатия клавиш. То есть, данный символ кодируется как зажатый CTRL+0xDD. В текстбокс, соответственно, данный символ не попадает и никак не отображается. Ну и на сервер в итоге передаются только печатные символы.

Проблема на клиентской части, с JS знаком весьма посредственно, наваял такой вот скрипт:

<script type="text/javascript">
    var ctrlReceived = false;
    function handleStroke(event) {
        var ctl = document.getElementById('hfTargetControl').value;
        if (ctrlReceived && event.keyCode == 221)
            document.getElementById(ctl).value += '|';
        ctrlReceived = (event.keyCode == 17);
        return null;
    };
</script>

hfTargetConrtrol - hidden input, в который с сервера записывается id требуемого текстбокса.
Соответственно, комбинацию GS я подменяю на |, а на сервере заменяю обратно.

Сам текстбокс формируется так:
<input name="ctl00$ContentPlaceHolder1$ctl02$txtScanBoxBarcode"
    type="text" 
    id="txtScanBoxBarcode"
    class="TextField"
    onkeydown="handleStroke(event);"
    style="width:60%;" />


Проблема: протестировал на всех браузерах, везде код работает, кроме Safari. Почему - для меня загадка, да и протестировать сложно, т. к. работаю под виндой. Кто-нибудь может предположить, в чём проблема?

И второй вопрос: а в принципе, как-нибудь попроще передать FNC1 в текстбокс можно?
  • Вопрос задан
  • 599 просмотров
Решения вопроса 1
@grinat
Да можно коды снифать на стороне js и как есть передавать на сервер, например через запятую, на сервере их разбирать. Либо перекодировать в другую кодировку, как вариант:
<script>
var inputKeys = [];
function handleStroke(event) {
    inputKeys.push(event.keyCode);
	onSubmitForm();
};
function onSubmitForm(){
	console.log('Через , =' + inputKeys.join(','));
	
	// если надо пееркодировать, закодировать https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder
    var utf8decoder = new TextDecoder('utf8');
    console.log('Пример, в utf8 =' + utf8decoder.decode(new Uint8Array(inputKeys)));
}
</script>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы