0

我的代码有点问题。我正在尝试从下拉菜单中进行计算,然后它将 onChange 更改为文本框。几天来,我一直在尝试弄清楚它并在谷歌上搜索编码该功能的方法。任何人都可以请帮助或就如何解决这个问题给我建议吗?

function numGuest()
{
    var a = document.getElementById("guests");
    if(a.options[a.selectedIndex].value == "0")
    {
        registration.banq.value = "0";
    }
    else if(a.options[a.selectedIndex].value == "1")
    {
        registration.banq.value = "30";
    }
}
<select id="guests" name="guests">
<option value="0">0</option>
<option value="1">1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>

<input type="text" id="banq" name="banq" onChange="numGuest()" disabled />
4

3 回答 3

1

注册没有定义。您需要以与 guest 元素相同的方式获取文本输入元素。此外,onChange 侦听器应附加到选择菜单而不是文本区域。

<html>
<script>
function numGuest()
{
    var banq = document.getElementById('banq');
    var a = document.getElementById("guests");

    if(a.options[a.selectedIndex].value == "0")
    {
        banq.value = "0";
    }
    else if(a.options[a.selectedIndex].value == "1")
    {
        banq.value = "1";
    }
}
</script>
<select id="guests" name="guests"  onChange="numGuest()" >
    <option value="0">0</option>
    <option value="1">1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
</select>

    <input type="text" id="banq" name="banq" disabled />
</html>
于 2012-10-03T02:59:49.737 回答
0

为什么 id=banq (textfield) 被禁用?

启用:document.getElementById('banq').disabled = false;

对于选择的值:

function numGuest(){
    var theGuestValForCalc = 0;
    var theFinalResult = 0;   

    theGuestValForCalc = document.getElementById('guests').options[document.getElementById('guests').selectedIndex].value;



    theFinalResult = theGuestValForCalc * 10 // or some value, calculation, etc.

    document.getElementById('banq').innerHTML = theFinalResult;

    // return theFinalResult;

}

于 2012-10-03T02:57:23.267 回答
0

在您的代码中:

> <input type="text" id="banq" name="banq" onChange="numGuest()" disabled />

那可能应该是一个只读字段,而不是禁用的。

onchange 监听器应该在 select 元素上。此外,为方便起见,您可以在侦听器中传递对元素的引用:

<select name="guests" onchange="numGuest(this)">

然后在 numGuest 函数中:

function numGuest(element) {

并且element将是对其处理程序调用该函数的元素的引用。

由于您说您的控件位于表单中,并且具有名称的表单控件被命名为它们所在表单的命名属性,因此您可以简化代码:

  var form = element.form;
  var banq = form.banq;
  var a = form.guests; // or element

如果选中的选项有值(见下面的注释),那么你可以直接使用 select 元素的 value 属性:

  if (a.value == "0") {
    banq.value = "0";

  } else if (a.value == "1") {
    banq.value = "1";
  }

你就完成了。

笔记:

  1. 如果选项没有 value 属性或属性,则其值为文本内容。不幸的是,旧版本的 IE 不支持,所以你必须使用select.options[select.selectedIndex].text. 但是最好的办法是总是给选项一个值,这样你就可以得到选择元素的值。
  2. 无需提供表单控件名称和 ID。他们必须有名字才能成功,所以只要给他们名字而忘记他们的身份。
于 2012-10-03T03:35:40.443 回答