【问题标题】:Why can't I set my input field with MooTools?为什么我不能用 MooTools 设置我的输入字段?
【发布时间】:2012-03-12 14:56:51
【问题描述】:

我有一个文档,当用户在一个输入中输入内容时,我需要在第二个输入框中显示响应。我可以获取用户给定的值,我可以处理它,但是当我尝试使用结果设置第二个输入框时,我得到错误 $.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));
});

所以我得到了位置值。我从一个 assoc 数组中拉出这个地方的价格。然后,我将该价格乘以用户输入的晚数字段,这就是我的总金额。这是我无法设置的数量。请注意,警报显示正确的金额。

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>

萤火虫回应:

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

任何想法/建议任何人?先感谢您!

【问题讨论】:

  • 值得注意的是,我正在使用 MooTools。
  • MooTools?不是 jQuery?如果您使用的是 MooTools,为什么问题标记为 jQuery,为什么 jQuery 在标题中? $('nights').addEvent 不是 jQuery。好像你在混淆/混淆 MooTools 和 jQuery。
  • 在某些地方你使用MooTools的document.id快捷方式($('places')),而后来你使用jQuery($("#pricepernight"))?
  • 好的,那么我肯定会把这两者混为一谈。看来我得对这些东西做一些阅读了。我都是新手。编辑标签和标题。感谢您的回复

标签: javascript forms events input mootools


【解决方案1】:

对。您似乎混合使用了 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')

【讨论】:

  • 好的,谢谢您的回复。事情正在慢慢变得清晰 :) 我将我的代码更新为您回复之前的内容。我会看看我现在能不能让它工作!
  • 是的,检查一下。 jsfiddle.net/RcTLu - 证明它现在可以正常工作,尽管我已经使用下拉列表和匹配的价格地图以使其更容易 - 我想在你的情况下,事情会更复杂 - 例如,松散的打字:jsfiddle.net/RcTLu/2 直到它打一场比赛。
  • 你,我的朋友,真棒。很好的例子和网站。如果我有足够的代表,我会 +1 你:P 谢谢!
  • .get 的 mootool 等价物是什么?任何的想法? Firebug 告诉我 .get 不是一个有效的函数:$("places").get is not a function [Break On This Error] var places = $('places').get('value');
  • 本地有什么版本的mootools?在“正常”英文字符集之外是否有任何特殊字符?如果您愿意,请访问 irc.freenode.net #mootools 并 ping 我(nick coda),我们会进一步了解。
【解决方案2】:

这里有几个小错误。

  1. 首先,您应该使用 # 符号根据您的 id 属性进行选择 喜欢地方和夜晚

    查看http://api.jquery.com/id-selector/

  2. 其次,使用 val() 从 html 控件中读取值,而不是 比值

    查看http://api.jquery.com/val/

【讨论】:

  • 您好,感谢您的回复。我使用 # 来访问 ID 为“pricepernight”的输入字段。这不是你的意思还是我理解错了?
  • 你正确地为 id "pricepernight" 但不是为 id "places" 和 "nights" 。此外,您需要解析数字 (docs.jquery.com/Types#Parsing_Numbers),因为您正在执行的计算不适用于字符串,并且可能会产生尴尬的输出。
【解决方案3】:

试试这个

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

【讨论】:

  • values[] 是一个包含一堆价格的关联数组。用户输入一个 int (1-10) 并选择哪个位置。 (我知道......但这是客户希望完成的方式)。然后根据用户给出的索引将价格从数组中提取出来。
  • 仅供参考,而不是使用 [] 表示法,有些人认为使用点表示法更容易阅读,因此 var price = values[places] 可能是 var price = values.places 如果您希望它默认为万一由于某种原因 values.places 未定义,您可以更进一步并执行 price = values.places || 0;其中 0 可以是任何整数,也可以用引号括起来以放置默认字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2021-08-04
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
相关资源
最近更新 更多