JQuery математика и переменные - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь взять переменную (значение текстового ввода) и выполнить математическую обработку, затем вывести результат в другой элемент.это не работает.

Вот мой код - http://slexy.org/view/s2TIOA5FKw.

Ответы [ 4 ]

2 голосов
/ 26 января 2011

Попробуйте использовать parseInt, функцию JavaScript.

1 голос
/ 26 января 2011
$('#element_3').val()

Когда вы работаете с полями ввода, вам нужно использовать .val, чтобы получить их значение.

РЕДАКТИРОВАТЬ Чтобы было ясно, под "нужно использовать" я говорю, что это лучше, чем существующий код, var $months = $('#element_3'). Мои извинения, если то, как я изобразил необходимость, было неточным.


Исходя из того, что я мог собрать воедино, это то, что я придумал. Я думаю это то, что вы ищете. Если нет, я надеюсь, что это как минимум шаг к вашему решению (и поможет вам понять, как работает jQuery). Пожалуйста, прокомментируйте сообщение, если у вас есть какие-либо вопросы, и я сделаю все возможное, чтобы ответить на них.

Начните с этого: http://www.jsfiddle.net/zzd3K/3/ (рабочий пример)
[Комментированная версия]

Комментируется и работает, с исправлением # element_1 .bind () (орфографическая ошибка, "kepress" -> "keypress")

HTML

    <html>
  <head>
    ...
    <script type="text/javascript">
      $(function(){
        $('input[name=select]').change(function(){
            $('#select').text($(this).val());
        });
        $('#element_1').bind('keydown keyup keypress', function(){
            $('#advertiserNameDisplay').html($(this).val());
        });
        $('#element_2').bind('keydown keyup keypress', function(){
            $('#adImageDisplay').text($(this).val());
        });
        $('#element_3').bind('keydown keyup keypress', calcPrice);
        function calcPrice(){
            var months = parseInt($('#element_3').val());
            if (!isNaN(months)){
                var rate = 1;
                if (months >= 1 && months < 3){
                    rate = 199;
                }else if (months >= 3 && months < 6){
                    rate = 175;
                }else{
                    rate = 150;
                }   
                var price = rate * months;
                $('#rate').text(rate);
                $('#months').text(months);
                $('#total').text(price);
            }else{
                $('#months').text('-');
            }
        }
        calcPrice();
      });
    </script>
    ...
  </head>
  <body>
    ...
    <fieldset>
        <legend>Configured Values</legend>
        <table>
            <tr>
                <td>Ad:</td>
                <td><input type="text" name="select" value="" /></td>
            </tr>
            <tr>
                <td>Name:</td>
                <td><input type="Text" id="element_1" value="" /></td>
            </tr>
            <tr>
                <td>Ad Image URL:</td>
                <td><input type="text" id="element_2" value="" /></td>
            </tr>
            <tr>
                <td>Months:</td>
                <td><input type="text" id="element_3" value="12" /></td>
            </tr>
        </table>
    </fieldset>
    <br /><br />
    <ul>
        <li>Ad Selected: #<span id="select"></span></li>
        <li>Your Name: <span id="advertiserNameDisplay"></span></li>
        <li>Your Image URL: <span id="adImageDisplay"></span></li>
        <li>Your total is $<span id="total"></span>.00 at a rate of $<span id="rate"></span>.00 per month for <span id="months"></span> months.</li>
    </ul>
    ...
  </body>
</html>

(Не обращайте внимания на набор полей, я использовал его для имитации ваших элементов управления)

0 голосов
/ 26 января 2011

Прежде всего, рекомендуется начинать часть скрипта, по крайней мере, с:

<script type="text/javascript">

... в некоторых системах тег скрипта может быть назначен VBScript, и поэтому ваш JS там не будет работать.

Во-вторых, вышеприведенные комментарии верны - вам нужно использовать .val () для получения значения, которое вероятно , что вы пытаетесь сделать здесь:

var $months = $('#element_3');

... который должен читать либо:

var $months = parseInt($('#element_3').val());
// check if the value if an integer and reset it to 0 if it's not
if (isNaN($months)) {
    $months = 0;
}

... или:

var $months = $('#element_3').length;

(не могу точно сказать, так как яне видите # element_3 на странице - это может быть выпадающий список или текстовое поле)

затем строка 34 содержит: $ ('# total'). html(document.write ($ total)) , который не может работать по 2 причинам:

  1. $ total не определено нигде в документе
  2. document.write () очищаетдокумент, когда он уже был загружен (вот как работает document.write)

вы, вероятно, можете избежать неприятностей с $ ('# rate'). html ($ rate)

и наконец, я предлагаю вамВы должны использовать Firebug для отладки вашего кода, так как некоторые из этих ошибок наверняка появятся там; -)

0 голосов
/ 26 января 2011

попробуйте что-то вроде этого var newVal = parseInt ($ ('# sourcElement'). Val ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...