JQuery математическое дополнение - PullRequest
6 голосов
/ 21 июля 2011

Я пытаюсь добавить через событие jquery и получаю NaN.Чего мне не хватает?

   <input type="hidden" id="skillcount" name="skillcount" value="3" onchange="valueadd(this)"/>

   function valueadd(ok){
var value=parseFloat($(this).val())+1;
}

Ответы [ 4 ]

6 голосов
/ 21 июля 2011

Код должен быть:

function valueadd(ok){
  // "this" inside here refers to the window
  var value=parseFloat(ok.value)+1;
} 

Встроенный onchange на самом деле является анонимной функцией:

function() {
   //"this" inside here refers to the element
   valueadd(this);
}

Таким образом, «this» - это аргумент, который называется «ok» вобласть значенийКак уже говорили другие, вы, вероятно, захотите использовать связывание jquery, так что «this» внутри valueadd будет указывать на элемент.

5 голосов
/ 21 июля 2011

this - это зарезервированное слово в JavaScript, поэтому его нельзя использовать в сигнатуре аргумента функции.

Возможно, я бы изменил этот код на ...

$('#skillcount').change(function() {
    var value = parseFloat($(this).val()) + 1;
});

jsFiddle .

... и сбросьте встроенный обработчик событий.

Чтобы проверить, возвращает ли parseFloat() NaN, используйте isNaN().

3 голосов
/ 21 июля 2011

Вы должны быть в состоянии сделать это просто так:

<input type="hidden" id="skillcount" name="skillcount" value="3" onchange="valueadd()"/>

function valueadd()
{
    var value=parseFloat(this.value)+1;
}
1 голос
/ 21 июля 2011
  1. Назначьте свое поведение с помощью jQuery, поскольку он у вас есть и все равно используется. Не используйте встроенные обработчики событий
  2. Функция, связанная с jQuery, выполняется в области действия элемента, с которым произошло событие. Что означает this это элемент.
  3. this нельзя использовать в качестве имени параметра или чего-либо иного, кроме как для доступа к объекту в области видимости.

Использование:

<input type="hidden" id="skillcount" name="skillcount" value="3" />

<script type="text/javascript">
    $( '#skillcount' ).bind( 'change', function()
    {
        var value = parseFloat( $( this ).val() ) + 1;
    } );
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...