我有下拉列表,在用户在文本框中输入值后,将一种货币转换为另一种货币,选择货币符号(例如USD-> AUD),然后点击转换,转换后的货币应输出到页面。
这是php代码,它从表格货币和费率中获取数据库中的数据,并分配给下拉列表中使用的选项值。
while ($row=mysql_fetch_array($refDB)) {
$currency=$row["currency"];
$rate=$row["rate"];
$options.="<option/$rate/>".$currency;
}
以下是填充数据的下拉列表。到目前为止,符号正在填充,但我不确定我是否通过下拉列表正确传递速率,因为这些是我正在使用的值。
<select id = "convert1" width="10">
<option value=0>From
<?=$options?>
</select>
<select id = "convert2" width="10">
<option value=0>To
<?=$options?>
</select>
用户选择“转换货币按钮”后:
<input type="button" name="convertCurrency" value="Convert Currency" onClick="entry.value=convert(entry);">
这是用户输入他们想要转换的值的地方:
<input type="text" id="enter" name="entry" size="18" value = "0">
将JavaScript转换为货币:
function convert(entry)
{
var convert1 = document.getElementById("convert1");
convert1.options[convert1.selectedIndex].value;
var convert2 = document.getElementById("convert2");
convert2.options[convert2.selectedIndex].value;
var sum = (entry/convert1)*(convert2);
return sum;
}
虽然它返回的是“NaN”,表明它是“非数字”,因此我必须通过下拉列表错误地将速率值放在我假设的位置。
$options.="<option/$rate/>".$currency;
我认为上面的代码我做错了。我已经尝试将费率优先分配给货币符号旁边的隐藏值,但无济于事。如果有人能够通过正确的下拉列表正确地指示我正确连接mySQL列值,那将非常感激。
答案 0 :(得分:0)
使用值属性
$options.="<option value='$rate'>".$currency;
答案 1 :(得分:0)
您的JavaScript代码有问题:
您获得id为“convert1”的元素并将其分配给变量convert1。在下一行中,您将检索所选选项的值,但不将其分配给变量。因此,在计算总和时,您实际上是对DOM元素而不是数字进行操作。
var convert1 = document.getElementById("convert1");
convert1.options[convert1.selectedIndex].value;
var convert2 = document.getElementById("convert2");
convert2.options[convert2.selectedIndex].value;
// Divides entry of type ? with DOM element and multiplies with DOM element
var sum = (entry/convert1)*(convert2);
您必须确保使用正确的对象,为空引用添加一些验证,并在计算总和之前将值转换为整数。
答案 2 :(得分:0)
修正了,我的javascript没有正确分配。
function convert(entry)
{
var e1 = entry.value;
var convert1 = document.getElementById("convert1");
var v1 = convert1.options[convert1.selectedIndex].value;
var convert2 = document.getElementById("convert2");
var v2 = convert2.options[convert2.selectedIndex].value;
var sum = ((e1/parseFloat(v1))*parseFloat(v2));
return sum;
}