По крайней мере, для меня подход signal(SIGSEGV ...)
, упомянутый в другом ответе, не работал на Win32 с Visual C ++ 2015. Что сделал для меня, было использовать _set_se_translator()
, найденный в eh.h
, Он работает следующим образом:
Шаг 1) Убедитесь, что вы включили Да с исключениями SEH (/ EHa) в Свойства проекта / С ++ / Генерация кода / Включить исключения C ++ , как указано в ответ Владимир Фрицкий .
Шаг 2) Вызовите _set_se_translator()
, передав указатель функции (или лямбда) для нового исключения translator . Он называется переводчиком, потому что он в основном просто берет исключение низкого уровня и перебрасывает его как нечто более легкое для захвата, например std::exception
:
#include <string>
#include <eh.h>
// Be sure to enable "Yes with SEH Exceptions (/EHa)" in C++ / Code Generation;
_set_se_translator([](unsigned int u, EXCEPTION_POINTERS *pExp) {
std::string error = "SE Exception: ";
switch (u) {
case 0xC0000005:
error += "Access Violation";
break;
default:
char result[11];
sprintf_s(result, 11, "0x%08X", u);
error += result;
};
throw std::exception(error.c_str());
});
Шаг 3) Поймать исключение, как вы обычно:
try{
MakeAnException();
}
catch(std::exception ex){
HandleIt();
};
Вы только что установили placeholder
... Вы также должны установить начальный value
.
<input type="number" placeholder="2.50" step="0.50" value="2.50" id="myInput">
Затем, когда пользователь щелкает внутренние спины, он начинается не с нуля, а с этого начального значения.
И использовать событие change
... Не input
, потому что оно срабатывает при каждой ключевой записи.
Last ... Чтобы получить два десятичных знака, «хитрость» состоит в том, чтобы проанализировать значение input
, используя .parseFloat()
и установить десятичные дроби с помощью .toFixed()
. [тысяча сто двадцать семь]
var input_changed = false;
$('#myInput').on('change', function() {
input_changed = true;
$(this).val( parseFloat($(this).val()).toFixed(2) )
});
$("#check").on("click",function(){
if(!input_changed){
console.log("0.00");
}else{
console.log( $('#myInput').val() );
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" placeholder="2.50" step="0.50" value="2.50" id="myInput">
<button id="check">What the value? (like on submit)</button>
<час> РЕДАКТИРОВАТЬ
[ 1130] если бы мне удалось увеличить входные данные их заполнителем ...blockquote>
Вот решение, в котором значение ввода не устанавливается при загрузке страницы.
Таким образом, если есть заполнитель, он добавляется к значению, созданному действием пользователя. Мы должны очистить этот заполнитель, чтобы избежать его добавления более одного раза.
$('#myInput').on('change', function() { value = parseFloat($(this).val()); placeholder = parseFloat($(this).attr("placeholder")) || ""; if(placeholder != ""){ value = value + placeholder; $(this).attr("placeholder", ""); } $(this).val( value.toFixed(2) ) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="number" placeholder="2.50" step="0.50" id="myInput">
Или, может быть, вы хотите использовать только заполнитель и никогда не иметь значения? [1117 ]
Здесь альтернатива:
$('#myInput').on('change', function() { var value = parseFloat($(this).val()); var placeholder = parseFloat($(this).attr("placeholder")) || 0; var newPlaceholder = value + placeholder; $(this).attr("placeholder",newPlaceholder.toFixed(2) ); $(this).val("").blur(); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="number" placeholder="2.50" step="0.50" id="myInput">
<input>s
Следующая демонстрация имеет <input type='text'>
для отображения значения и <input type='number'>
размер счетчика, который перекрывает другой вход. Поскольку type="number"
не отображает этот формат: 2.50
при использовании счетчика, a type="text"
может, но также будет принимать буквы. Чтобы предотвратить ввод букв, добавляются атрибуты [pattern]
и [required]
. Эти атрибуты действуют только при событии submit
. Тег <form>
был добавлен, поскольку для события submit
требуется тег <form>
.
A <fieldset>
оборачивается вокруг всех элементов управления формой и назначается position: relative
. Всем элементам управления формы назначены свойства position:absolute
и заданы свойства top
и left
. Ввод числа назначается z-index: 1
, поэтому он получает щелчки пользователя. Обратите внимание, что пунктирная схема может быть удалена, это просто для демонстрационных целей.
При щелчке по type="number"
его начальное значение 2.50
преобразуется в действительное число, а затем применяется к входу type="text"
, который, в свою очередь, отображает значение в виде строки в n.nn
формат.
$('#in1').on('click', function() {
var base = parseFloat($(this).val());
$('#in2').val(base.toFixed(2))
});
html,
body {
width: 100%;
height: 100%;
font: 400 16px/1.5 Consolas;
}
fieldset {
position: relative;
width: 50%;
height: 1.5rem;
border: 0;
padding: 0;
}
#in1 {
position: absolute;
display: inline-block;
width: 1rem;
height: 1rem;
top: calc(50% - 0.75rem);
left: 4.5rem;
z-index: 1;
outline: 1px dashed red;
}
#in2 {
position: absolute;
display: inline-block;
width: 5rem;
height: 1rem;
line-height: 1.5rem;
top: calc(50% - 0.75rem);
left: 0.5rem;
padding-left: 5px;
font: inherit;
}
[type=submit] {
position: absolute;
display: inline-block;
line-height: 1.35rem;
height: 1.35rem;
top: calc(50% - 0.75rem);
left: 5.85rem;
padding-top: 2px;
}
<form id='main'>
<fieldset>
<input id='in2' type='text' placeholder='2.50' pattern='[-0-9]+?|[-0-9]*?\.[0-9]+?' required autocomplete='off'>
<input id='in1' type="number" value="2.50" step="0.50">
<input type='submit'>
</fieldset>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>