2013-10-15 4 views
0

Я строю калькулятор затрат, который берет целое число из текстового поля, если он находится в пределах двух определенных цифр, тогда стоимость передается в поле затрат в форме. Я собирался использовать PHP, но изо всех сил получаю сообщение об Ajax вызова на работу, вот что я придумал до сих пор в JQuery:Динамическое обновление поля формы С помощью jQuery

$("#message_wordcount").change(function() { 
     var p; 
     var service = $("#message_service").val(); 
     var wc=parseInt($("#message_wordcount").val(), 10); 

     if($(service=="Critique") 
     { 
      if (wc<="1200") { 
       var p=2.5;     
      } else if (wc>"1200" && wc<="2500") { 
       var p=5; 
      } else if (wc>"2500" && wc<="4000") { 
       var p=10; 
      } else if (wc>"4000" && wc<="6500") { 
       var p=15; 
      } else if (wc>"6500" && wc<="8000") { 
       var p=20; 
      } else if (wc>"8000" && wc<="12000") { 
       var p=25; 
      } else if (wc>"12000" && wc<="16000") { 
       var p=30; 
      } else if (wc>"16000" && wc<="20500") { 
       var p=35; 
      } else if (wc>"20500" && wc<="22500") { 
       var p=40; 
      } else if (wc>"22500" && wc<="25500") { 
       var p=45; 
      } else if (wc>"25500" && wc<="27000") { 
       var p=50; 
      } else if (wc>"27000" && wc<="29999") { 
       var p=55; 
      } else if (wc>"29999" && wc<="33600") { 
       var p=60; 
      } else if (wc>"33600" && wc<="36100") { 
       var p=65; 
      } else if (wc>"36100" && wc<="38700") { 
       var p=70; 
      } else if (wc>"38701" && wc<="40700") { 
       var p=75; 
      } else if (wc>"40700" && wc<="42700") { 
       var p=80; 
      } else if (wc>"42700" && wc<="45000") { 
       var p=85; 
      } else if (wc>"45000" && wc<="48000") { 
       var p=90; 
      } else if (wc>"48000" && wc<="49500") { 
       var p=95; 
      } else if (wc>"49500" && wc<="52000") { 
       var p=100; 
      } else if (wc>"52000" && wc<="54500") { 
       var p=105; 
      } else if (wc>"54500" && wc<="57000") { 
       var p=110; 
      } else if (wc>"57000" && wc<="59999") { 
       var p=115; 
      } else if (wc>"59999" && wc<="63000") { 
       var p=120; 
      } else if (wc>"63000" && wc<="68000") { 
       var p=125; 
      } else if (wc>"68000" && wc<="72000") { 
       var p=130; 
      } else if (wc>"72000" && wc<="76000") { 
       var p=135; 
      } else if (wc>"76000" && wc<="79999") { 
       var p=140; 
      } else if (wc>"79999" && wc<="85999") { 
       var p=145; 
      } else if (wc>"85999" && wc<="92000") { 
       var p=150; 
      } else if (wc>"92000" && wc<="99999") { 
       var p=155; 
      } else if (wc>"99999" && wc<="105000") { 
       var p=160; 
      } else if (wc>"105000" && wc<="110000") { 
       var p=170; 
      } else if (wc>"110000" && wc<="115000") { 
       var p=180; 
      } else if (wc>"115000" && wc<="120000") { 
       var p=190; 
      } else if (wc>"120000" && wc<="125000") { 
       var p=200; 
      } else if (wc>"125000" && wc<="130000") { 
       var p=210; 
      } else if (wc>"130000" && wc<="135000") { 
       var p=220; 
      } else if (wc>"135000" && wc<="139999") { 
       var p=230; 
      } else if (wc>"139999" && wc<="150000") { 
       var p=240; 
      } else if (wc>"150000" && wc<="159999") { 
       var p=245; 
      } else if (wc>"159999" && wc<="170000") { 
       var p=250; 
      } else if (wc>"170000" && wc<="180000") { 
       var p=260; 
      } else if (wc>"180000" && wc<="185000") { 
       var p=270; 
      } else if (wc>"185000" && wc<="192000") { 
       var p=280; 
      } else if (wc>"192000" && wc<="199999") { 
       var p=290; 
      } else if (wc>"199999" && wc<="250000") { 
       var p=300; 
      } 
      $("#message_cost").val(p); 
     } 
    }); 

А вот моя разметка:

<form action="<?php the_permalink(); ?>" method="post"> 
       <p><label for="name">Name: <span>*</span> <br><input type="text" name="message_name" value="<?php echo esc_attr($_POST['message_name']); ?>"></label></p> 
       <p><label for="message_email">Email: <span>*</span> <br><input type="text" name="message_email" value="<?php echo esc_attr($_POST['message_email']); ?>"></label></p> 
       <p><label for="message_service">Service: <span>*</span><br><select name="message_service"><option value="<?php echo esc_attr($_POST['message_service']); ?>Critique">Critique</option> 
        <option value="<?php echo esc_attr($_POST['message_service']); ?>Standard Edit">Standard Edit</option> 
        <option value="<?php echo esc_attr($_POST['message_service']); ?>Comprehensive">Comprehensive</option> 
       </select></label></p> 
       <p><label for="message_wordcount">Word Count: <span>*</span> <br><input id="message_wordcount" type="text" name="message_wordcount" value="<?php echo esc_attr($_POST['message_wordcount']); ?>"></label> &nbsp <a href="#" id="cC">Calculate Cost</a></p> 
       <p><label for="message_cost">Total Cost: <br><input id="message_cost" type="text" name="message_cost" value="<?php echo esc_attr($_POST['message_cost']); ?>" readonly></label></p> 
       <p><label for="message_text">Message: <span>*</span> <br><textarea type="text" name="message_text"><?php echo esc_textarea($_POST['message_text']); ?></textarea></label></p> 
       <p><label for="message_human">Human Verification: <span>*</span> <br><input type="text" style="width: 60px;" name="message_human"> + 3 = 5</label></p> 
       <input type="hidden" name="submitted" value="1"> 
       <p><input type="submit"></p> 
       </form> 

Однако ничего не происходит, когда поле wordcount изменено - я мог заставить функцию вернуть цену до ее интеграции с формой.

Любая помощь будет признателен, спасибо

+0

После объявления 'уаг p'. почему вы заявляете это каждый раз? –

+1

Если вы вначале объявили «var p», почему вы повторно объявляете его в каждом состоянии? Просто 'p = something' будет достаточно. Но это не проблема. – melancia

+2

вам нужно удалить '$ (' in 'if ($ (service ==" Critique ")' это недопустимый синтаксис – Liam

ответ

0

change событие срабатывает только когда фокус покидает поле ввода. Вы можете использовать что-то вроде keyup вместо этого, чтобы реагировать, пока фокус все еще находится в поле ввода.

Как отметил @Liam, у вас также есть синтаксическая ошибка в коде. В большинстве современных браузеров есть инструменты разработчика, которые помогают отслеживать ошибки во время выполнения. Если вы, например, используете Chrome, вы можете нажать F12, чтобы запустить инструменты разработчика. Перейдите на вкладку «Консоль» и обновите веб-страницу, чтобы просмотреть список ошибок времени выполнения.

+0

Опять же, как и с другим вопросом, как это помогает? Ваше простое изменение на нажатие клавиши. это не то, о чем просит ОП. * Однако ничего не происходит, когда изменяется поле wordcount * – Liam

+1

Очень распространенное заблуждение, что событие 'change' запускается, как только изменяется содержимое' '. Большинство людей с удивлением обнаруживают, что вам нужно удалить фокус из поля ввода, чтобы вызвать его. Я считаю, что вопрос о ОП проистекает из этого самого недоразумения. Однако, как вы уже указали, в коде есть также синтаксические ошибки, которые необходимо также очистить. –

1

Проверьте приведенную ниже скрипку. Надеюсь, что это помогает вам

Чтобы получить количество строк - DEMO HERE Чтобы получить количество слов - DEMO HERE

Вместо ParseInt, получить длину строки и вместо функции изменения дают KeyUp функцию.

JS здесь

$("#message_wordcount").keyup(function() { 
    var p; 
    var wc=$("#message_wordcount").val().length; 
    if (wc<="1200") { 
     var p=2.5;     
    } else if (wc>"1200" && wc<="2500") { 
     var p=5; 
    } else if (wc>"2500" && wc<="4000") { 
     var p=10; 
    } else if (wc>"4000" && wc<="6500") { 
     var p=15; 
    } else if (wc>"6500" && wc<="8000") { 
     var p=20; 
    } else if (wc>"8000" && wc<="12000") { 
     var p=25; 
    } else if (wc>"12000" && wc<="16000") { 
     var p=30; 
    } else if (wc>"16000" && wc<="20500") { 
     var p=35; 
    } else if (wc>"20500" && wc<="22500") { 
     var p=40; 
    } else if (wc>"22500" && wc<="25500") { 
     var p=45; 
    } else if (wc>"25500" && wc<="27000") { 
     var p=50; 
    } else if (wc>"27000" && wc<="29999") { 
     var p=55; 
    } else if (wc>"29999" && wc<="33600") { 
     var p=60; 
    } else if (wc>"33600" && wc<="36100") { 
     var p=65; 
    } else if (wc>"36100" && wc<="38700") { 
     var p=70; 
    } else if (wc>"38701" && wc<="40700") { 
     var p=75; 
    } else if (wc>"40700" && wc<="42700") { 
     var p=80; 
    } else if (wc>"42700" && wc<="45000") { 
     var p=85; 
    } else if (wc>"45000" && wc<="48000") { 
     var p=90; 
    } else if (wc>"48000" && wc<="49500") { 
     var p=95; 
    } else if (wc>"49500" && wc<="52000") { 
     var p=100; 
    } else if (wc>"52000" && wc<="54500") { 
     var p=105; 
    } else if (wc>"54500" && wc<="57000") { 
     var p=110; 
    } else if (wc>"57000" && wc<="59999") { 
     var p=115; 
    } else if (wc>"59999" && wc<="63000") { 
     var p=120; 
    } else if (wc>"63000" && wc<="68000") { 
     var p=125; 
    } else if (wc>"68000" && wc<="72000") { 
     var p=130; 
    } else if (wc>"72000" && wc<="76000") { 
     var p=135; 
    } else if (wc>"76000" && wc<="79999") { 
     var p=140; 
    } else if (wc>"79999" && wc<="85999") { 
     var p=145; 
    } else if (wc>"85999" && wc<="92000") { 
     var p=150; 
    } else if (wc>"92000" && wc<="99999") { 
     var p=155; 
    } else if (wc>"99999" && wc<="105000") { 
     var p=160; 
    } else if (wc>"105000" && wc<="110000") { 
     var p=170; 
    } else if (wc>"110000" && wc<="115000") { 
     var p=180; 
    } else if (wc>"115000" && wc<="120000") { 
     var p=190; 
    } else if (wc>"120000" && wc<="125000") { 
     var p=200; 
    } else if (wc>"125000" && wc<="130000") { 
     var p=210; 
    } else if (wc>"130000" && wc<="135000") { 
     var p=220; 
    } else if (wc>"135000" && wc<="139999") { 
     var p=230; 
    } else if (wc>"139999" && wc<="150000") { 
     var p=240; 
    } else if (wc>"150000" && wc<="159999") { 
     var p=245; 
    } else if (wc>"159999" && wc<="170000") { 
     var p=250; 
    } else if (wc>"170000" && wc<="180000") { 
     var p=260; 
    } else if (wc>"180000" && wc<="185000") { 
     var p=270; 
    } else if (wc>"185000" && wc<="192000") { 
     var p=280; 
    } else if (wc>"192000" && wc<="199999") { 
     var p=290; 
    } else if (wc>"199999" && wc<="250000") { 
     var p=300; 
    } 
    $("#message_cost").val(p); 
}); 

HTML форма

<input id="message_wordcount" type="text" name="message_wordcount" value="" /> 
<input id="message_cost" value="" /> 
+0

Большое спасибо, однако, я нахожу, что когда я ввожу значение в поле wordcount, оно по умолчанию соответствует первому условию и не обновляется никакими дополнительными значениями. – iKettles

+1

Проработал только это, #message_service тоже не так, у вас не было ввода с идентификатором #message_service – Liam

+0

@iKettles, предоставить идентификатор «message_service» в поле выбора –

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