Ваше определение функции JavaScript будет работать просто отлично, но ваша функция не вызывается из-за вашего британского кода C #. Если предполагается, что это код C #, то он недействителен, вам нужно явно проверить true и amp; ложные значения. В JavaScript вы можете просто приравнять истинные и ложные значения так, как вы это делали в своем первоначальном посте ...
Пример ...
if (someCondition) допустимо в JavaScript, но не в C #.
<script type="text/javascript">
function openPopup() {
$("#loginModal").modal('show');
}
@if (afterError != null)
{
openPopup();
}
</script>
Также имейте в виду, что ваша логика вызывается только один раз при загрузке страницы. Вы можете отключить эту функцию из любого события, хотя ... щелчок мышью, мышиный центр и т. Д.
Существует одно устойчивое и портативное решение, которое должно использовать strtoimax()
и проверьте на переполнение.
Таким образом, я анализирую intmax_t
, проверьте на ошибку от strtoimax()
, и затем также посмотрите, "подходит" ли это к a pid_t
путем кастинга его и сравнения его с оригиналом intmax_t
значение.
#include <inttypes.h>
#include <stdio.h>
#include <iso646.h>
#include <sys/types.h>
char *xs = "17"; /* The string to convert */
intmax_t xmax;
char *tmp;
pid_t x; /* Target variable */
errno = 0;
xmax = strtoimax(xs, &tmp, 10);
if(errno != 0 or tmp == xs or *tmp != '\0'
or xmax != (pid_t)xmax){
fprintf(stderr, "Bad PID!\n");
} else {
x = (pid_t)xmax;
...
}
Не возможно использовать scanf()
, потому что, (поскольку я сказал в комментарии), scanf()
не обнаружит переполнение. Но я был неправ в высказывании что ни один из strtoll()
- связанные функции берут intmax_t
; strtoimax()
делает!
Это также не будет работать для использования чего-либо еще, чем strtoimax()
если Вы не знаете размера своего целого типа (pid_t
, в этом случае).
Это зависит от точно, как портативный Вы хотите быть. POSIX говорит это pid_t
тип целого числа со знаком, используемый для хранения идентификаторов процесса и идентификаторов группы процесса. На практике Вы могли принять с безопасностью это long
является достаточно большим. Приводя к сбою это, Ваш intmax_t
должно быть достаточно большим (таким образом, это примет любого допустимого pid_t
); проблема, тот тип мог принять значения, которые не законны в pid_t
. Вы застреваете в безвыходном положении.
Я использовал бы long
и не волнуются очень об этом за исключением неясного комментария где-нибудь, что археолог программного обеспечения 100 лет следовательно будет находить и наблюдать, приводит причину, почему 256-разрядный ЦП скрипит к останову при вручении 512-разрядного значения как a pid_t
.
POSIX 1003.1-2008 теперь имеется в сети (все 3 872 страницы из него в PDF и HTML). Необходимо зарегистрироваться (свободный). Я добрался до него из Книжного магазина Open Group.
Все, что я вижу, существует то, что это должен быть тип целого числа со знаком. Очевидно, во все допустимые значения целого числа со знаком вписываются intmax_t
. Я не могу найти информацию в <inttypes.h>
или <unistd.h>
это указывает на PID_T_MAX или PID_T_MIN или другие такие значения (но я только что этим вечером получил доступ к нему, таким образом, он мог быть скрыт, где я не искал его). OTOH, я поддерживаю свой исходный комментарий - я полагаю, что 32-разрядные значения практично соответствуют, и я использовал бы long
так или иначе, который был бы 64-разрядным на 8-разрядных машинах. Я предполагаю, что примерно худшая вещь, которая могла произойти, состоит в том, что 'соответственно привилегированный' процесс считал значение, которое было слишком большим, и отправило сигнал в неправильный процесс из-за несоответствия типов. Я не убежден, что был бы взволнован по поводу этого.
... oooh!... p400 под <sys/types.h>
Реализация должна поддерживать одну или несколько сред программирования, в которых ширины blksize_t, pid_t, size_t, ssize_t, и suseconds_t не больше, чем ширина типа долго.
Если Вы действительно обеспокоены, что можете _assert(sizeof(pid_t) <= long)
или безотносительно типа Вы выбираете для своего материала '%'.
Как объяснено в этом ответе, говорит спецификация signed int
. Если 'интервал' изменяется, Ваш '%u' по определению изменяется с ним.