2015-12-23 4 views
-3

Для этой функции я пытаюсь вычислить результат переменных $ r и отобразить их в текстовом поле ввода формы «otherHtmlIdName».Javascript parseInt - Код работает 4 раза

Оператор if проверяет, имеют ли все значения значения, затем получает значение рассчитанной переменной и изменяет поле ввода. Он отлично работает, проблема в том, что он работает 4 раза подряд, один раз за каждые parseInt().

Есть ли способ, я могу просто запустить его один раз? Я пробовал parseFloat и Number. Не помогло.

[Изменить]: Этого не происходило из-за parseInt. Я вызывал функцию click в этом ID 4 раза в моем коде.

$("#htmlIdName").click(function() { 
    var variableName = parseInt($r.ab3, 10) - parseInt($r.ab4, 10) + parseInt($r.sb3, 10) + parseInt($r.sb4, 10); 
    if ($r.ab3 && $r.ab4 && $r.sb3 && $r.sb4) { 
     $("#otherHtmlIdName").val(variableName); 
     $("#otherHtmlIdName").change(); 
    }; 
}); 
+3

Что именно вы имеете в виду, что он «работает» один раз для каждого вызова 'parseInt()? Как вы можете сказать? Это не имеет никакого смысла. – Pointy

+1

Привет. Добро пожаловать в StackOverflow. Я не уверен, что понимаю, о чем вы спрашиваете. Вы говорите, что обработчик кликов работает 4 раза, или что вы должны вызывать parseInt 4 раза? – Ludo

+0

Если это последний, у вас действительно нет выбора, так как числа, которые вы обрабатываете, различны (ab3, ab4, sb3, sb4). Вы должны вызвать parseInt 4 раза. – Ludo

ответ

0

Try:

$("#htmlIdName").off().on('click', function() { 
    /* Your code here */ 
}); 
+0

Я не могу сказать, работает ли это или нет. Поскольку #htmlIdName - это кнопка, которая выводит вас на страницу с указанием ввода, который я ищу, это отключает кнопку. – H311B0Y

+0

Я отмечаю это как ответ, потому что вы действительно ответили на мой вопрос в комментарии выше. У меня есть $ ("# htmlIdName"). Нажимаем на вызов 4 раза в моем коде. Мне нужно найти что-то еще, чтобы прикрепить это. – H311B0Y

+0

@ H311B0Y. '' '' '' '' '' Удаление всех зарегистрированных обработчиков перед прикреплением обработчика 'click' выше. Он будет работать, но, вероятно, было бы лучше, если бы вы узнали, почему обработчик зарегистрирован несколько раз и исправляет ваш код, если это не предназначено. – kliron

0

Если вы спрашиваете, как предотвратить вызова parseInt() 4 раза, вы можете использовать map функцию:

$("#htmlIdName").click(function() { 
    //convert object of strings to array of ints 
    var arr = $.map($r, function(el) { 
    return +el 
    }); 

    //perform same calculations as before 
    var variableName = arr[0] - arr[1] + arr[2] + arr[3]; 

    if ($r.ab3 && $r.ab4 && $r.sb3 && $r.sb4) { 
    $("#otherHtmlIdName").val(variableName); 
    $("#otherHtmlIdName").change(); 
    }; 
}); 

Рабочий пример:

http://codepen.io/anon/pen/xZExeM

+0

Извините за то, что я n00b, но я не уверен, что понимаю, как это работает. У меня есть несколько десятков вызовов jquery для ввода идентификаторов полей, предшествующих в коде, которые настроены как теги $ ("# otherHtmlIdName"), и я изменил некоторые из них, чтобы сделать переменную $ r, чтобы я мог вычислить эту арифметику. Могу ли я группировать их по-другому, чем принимать идентификационные имена и помещать их в переменную $ r? Почему это вычисляет целые числа вместо консолинирующих строк, как это было раньше? – H311B0Y

+0

'' map'' применяет функцию, которую вы передаете ее каждому элементу в объекте/массиве. вся эта функция выполняет возврат каждого элемента после применения к нему унарного +, который автоматически анализирует его на int (пока строка уже находится в целочисленной форме). Причина, по которой он не работал с вашим кодом, заключается в том, что вы используете двоичный файл +, который не применяет преобразование. вы можете прочитать об этом здесь https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_() – Pabs123

Смежные вопросы