【问题标题】:Javascript Switch Case Not Working in socialengineJavascript Switch Case 在社交引擎中不起作用
【发布时间】:2014-03-23 16:14:58
【问题描述】:

我觉得问这个愚蠢的问题有点尴尬,但不知何故,下面的代码不起作用。值(床,房间,地板)被正确获取,但开关柜不起作用。但开关柜代码的相同 sn-p 在 jsfiddle 中运行良好。我确定我错过了一些愚蠢的东西。我在社交引擎中使用它和 mootools启用

我还想知道如何获取 id=roomtype 且位于 class=form-elementsid=roomtype 不是 div class=form-elements 的直接子元素的 div 中的元素。 我可以通过$$('.form-elements #roomtype').get('value') 得到它,但这指的是所有带有#roomtype 的元素,这个$('.form-elements #roomtype').get('value') 不起作用

<script type="text/javascript">
var updatePrice=function()
{

 var room= $$('.form-elements #roomtype').get('value')  ;

// alert (room) gets AirCon or Dorm
var price;

switch (room)
  {
  case "AirCon":
    price="10000"; alert("AirCon");
    break;
  case 'Dorm':
    price="5000"; alert("Dorm");
    break;
  default:
    price="00";
  }


}

 en4.core.runonce.add(updatePrice);// this add this function to DOM Ready
    </script>

【问题讨论】:

  • "id" 值必须是唯一的。如果您对单个页面上的多个元素重复使用“id”,事情将无法正常工作。
  • 你能展示一下它正在工作的jsiffle吗?
  • id 是唯一的,我使用 $$() 的原因是在我的第二个问题中。我无法使用 $('.form-elements #roomtype').get('value' )。该元素是 div 元素 (.form-elements) 的子元素之一 (#roomtype)
  • jsfiddle.net/zWq6N 因为我得到了 var "room",所以问题可能在其他地方。

标签: javascript mootools socialengine


【解决方案1】:

#1

ID 必须是唯一的。

在 MooTools 中,您可以通过 $('roomtype') 获取 ID 为 roomtype 的元素。

您也可以使用document.id('roomtype') 甚至$$('#roomtype')
由于 ID 必须是唯一的,因此它与该元素的父元素无关,因为只有一个。

#2

注意$$$ 是不同的element methods in mootools$$ 接受一个 CSS 选择器并返回一个集合/数组。

$$('#roomtype').get('value'); // returns ['the value']
$('roomtype').get('value'); // return 'the value'

#3

我看到的另一个问题是您在updatePrice() 函数的范围内定义价格,所以在开关内执行price = 5000 无论如何都不会离开函数的范围。您可能希望在函数外部定义 var price,或者让函数返回该值:

    // ...
    switch (room) {
        case "AirCon":
            price = "10000";
            alert("AirCon");
            break;
        case 'Dorm':
            price = "5000";
            alert("Dorm");
            break;
        default:
            price = "00";
    }
    return price; // here
}

如果你用 HTML 更新你的小提琴,它会更容易为你提供更多帮助。

P.s:随时欢迎您提出问题。不用觉得尴尬。

【讨论】:

  • 非常感谢。实际上,我只是想知道为什么 $('.form-elements #roomtype') 不引用单个唯一元素,而 $$() 却引用了。我的问题是永远无法到达开关盒,请忽略价格变量。即使(room=="Dorm") alert("D");不起作用。在这里,变量 room 正在从触发 onchange=updatePrice() 的 html 选择元素中获取数据;当我在该函数中得到任何 alert() 并且值也被获取时,事件被很好地触发,alert(room) 显示得很好。这真的很令人沮丧......
  • @Tanvir,更新了我的答案。如果这不能解决您的问题,请添加en4.core.runonce.add()的代码
  • 请检查jsfiddle.net/zWq6N/2,那里有问题,但在我的脚本事件中触发得很好。我必须说整个事情都是用zend框架制作的,所以jsfiddle html只是我代码的输出跨度>
  • @Tanvir,如果你只使用一个$,那么不要使用#。它与document.getElementById()相同。在这里查看:jsfiddle.net/zWq6N/3
  • 该事件仅在 DomReady 上触发一次,但之后永远不会触发,请检查一下。选择每个选项后,在每种情况下都会发出警报。
猜你喜欢
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2016-03-13
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
相关资源
最近更新 更多