Почему я не могу установить поле ввода с помощью MooTools? - PullRequest
1 голос
/ 12 марта 2012

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

$('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\'...

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

Ответы [ 3 ]

3 голосов
/ 12 марта 2012

право. вы, кажется, использовали смесь 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 голосов
/ 12 марта 2012

Здесь есть несколько мелких ошибок.

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

    Чек http://api.jquery.com/id-selector/

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

    Чек http://api.jquery.com/val/

0 голосов
/ 12 марта 2012

попробуйте

$('#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]?

...