2012-03-12 3 views
1

У меня есть документ, и когда пользователь вводит что-то в один вход, мне нужно показать ответ во втором поле ввода. Я могу получить заданное пользователем значение, я могу обработать его, но когда я пытаюсь установить второе поле ввода с результатом, я получаю ошибку $ .field равно null. Вот код:Почему я не могу установить поле ввода с помощью MooTools?

$('places').addEvent('keyup', function(){ 
    var places = $('places').value; 
    alert("PLACE: "+places); 
    var price = values[places]; 
    var nights = $('nights').value.toInt(); 
    alert("NIGHTS: "+nights); 
    var total = price * nights; 
    alert("TOTAL: "+total); 
    $('pricepernight').set('text', total); 
    $('pricetotal').set('text', total - ((total/100) * 21)); 
}); 

Так что я получаю значение места. Я вытягиваю цену за место из массива. Затем я умножу эту цену на количество ночей в поле пользователя, и тогда это моя общая сумма. Именно эту сумму я не могу установить. Обратите внимание, что предупреждение показывает правильную сумму.

и HTML выглядит следующим образом

<div class='block'> 
    <input type="text" id="places" /> 
</div> 

<div class='block'> 
    <label for="nachten">Aantal nachten</label> 
    <input type="text" id="nights" /> 
</div> 

<div class='block long'> 
    <span class='label'>Prijs per slaapplaats per nacht</span> 
    <input type="text" class='resultfield' id='pricepernight' /> 
</div> 
<div class='block last'> 
    <span class='label'>Totaalprijs excl. btw</span> 
<input type="text" class='resultfield' id='pricetotal'/> 
</div> 

Firebug отвечает:

String contains an invalid character 
[Break On This Error] 

...x:\'4W\',3X:18.1l,al:18.1l,1Q:18.1l,as:18.1l,8S:18.1l,1F:O,3E:{x:\'1u\',y:\'1o\'... 

Любые идеи/предложения кто-нибудь? Заранее спасибо!

+0

Это может быть также стоит отметить, что я использую MooTools. – JeremyS

+1

MooTools? Не jQuery? Если вы используете MooTools, почему возникает вопрос о jQuery, и почему jQuery в заголовке? '$ ('nights'). addEvent' не jQuery. Похоже, вы путаете/смешиваете MooTools и jQuery. –

+2

В некоторых местах вы используете ярлык 'document.id' MooTools' '(' places ') '), а позже вы используете jQuery (' $ («# pricepernight»))? –

ответ

3

правый. вы, кажется, использовали сочетание mootools и jquery-кода.

$('nights').addEvent('keyup', function(){ 
    var places = $('places').value; 
    var price = values[places]; 
    var nights = $('nights').value; 
    var total = price * nights; 
    alert(total); 
    $('#pricepernight').val(total); 
    //$('#pricetotal').val(total - ((total/100) * 21)); 
}); 

в MooTools 1.2+, это должно быть:

$('nights').addEvent('keyup', function(){ 
    var places = $('places').get('value'); 
    var price = values[places]; 
    var nights = $('nights').get('value'); 
    var total = price * nights; 
    alert(total); 
    $('pricepernight').set('value', total); 
    //$('#pricetotal').val(total - ((total/100) * 21)); 
}); 

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

пункт есть. #id ->id и .val() ->set('value', 'newvalue') - или .get('value')

+0

Хорошо, спасибо за ваш ответ. Все медленно становится яснее :) Я обновил свой код до того, что у меня было до вашего ответа. Я посмотрю, смогу ли я заставить его работать сейчас! – JeremyS

+0

Да, проверьте это. http://jsfiddle.net/RcTLu/ - доказывает, что теперь он может работать нормально, хотя я пошел с раскрывающимся списком и ценовой картой, которая соответствует ей, чтобы было проще - я думаю, в вашем случае все будет сложнее - например, потерять набрав: http://jsfiddle.net/RcTLu/2/, пока он не попадет в совпадение. –

+0

Ты, друг мой, потрясающий. Отличный пример и сайт. Я бы добавил +1, если бы у меня было достаточно репутации: P Спасибо! – JeremyS

0

попробовать это

$('#nights').keyup(function(){ 
    var places = $('#places').val(); 
    var price = values[places]; 
    var nights = $('#nights').val(); 
    var total = parseInt(price) * parseInt(nights); 
    alert(total); 
    $('#pricepernight').val(total); 
    //$('#pricetotal').val(total - ((total/100) * 21)); 
}); 

и что values[places]?

+0

values ​​[] - это ассоциативный массив с кучей цен в нем.Пользователь вводит int (1-10) и выбирает, какое место. (Я знаю ... но так хочет клиент). Затем цена вытягивается из массива на основе индекса, который дал пользователь. – JeremyS

+0

@JeremyS ok ..... :) –

+0

FYI в отличие от использования [] нотации некоторые считают, что читать легче с использованием точечной нотации, поэтому var price = values ​​[places] может быть var price = values.places ТАКЖЕ, если вы как и по умолчанию, по какой-то причине значения values.places не определены, вы можете пойти еще на один шаг и сделать price = values.places || 0; где 0 может быть любым целым числом или вы можете заключить в кавычки строку по умолчанию. –

0

Здесь есть несколько незначительных ошибок.

  1. Во-первых, вы должны использовать знак #, чтобы выбрать на основе вашего идентификатора атрибутов как места и ночи

    Проверить http://api.jquery.com/id-selector/

  2. Во-вторых, использовать Вэл() для чтения значения из HTML управления скорее , чем значение

    Проверить http://api.jquery.com/val/

+0

Здравствуйте, спасибо, что ответили. Я использую # для доступа к полю ввода с идентификатором «pricepernight». Разве это не то, что вы имели в виду, или я понял, что вы неправы? – JeremyS

+0

Вы делаете это правильно для id "pricepernight", но не для id "мест" и "ночей". так же вам нужно разбирать номера (http://docs.jquery.com/Types#Parsing_Numbers), так как вы делаете калорации, которые не будут работать на строках и могут давать неудобные выходы. –