每个()枚举中的PrototypeJS输入值

时间:2014-06-02 09:08:34

标签: javascript html performance prototypejs

为什么未选中复选框时,下面的HTML / JS会返回“on”值?此代码在tab.my上有效(暂时)。

HTML

<button type="button" id="init" class="btn btn-primary btn-sm">Init</button>

<form id="domains">

  <div id="domain1">
    <input type="checkbox" name="input1" />
    <a>Domain 1</a>
  </div>

  <div id="domain2">
    <input type="checkbox" name="input2" />
    <a>Domain 2</a>
  </div>

</form>

JS

$('init').observe('click', init);

function init() {
  $('domains').select('div').each(function(domain){
    console.log(domain.select('input')[0].value);
  });
}

我看了this帖子,但我正在尝试学习JavaScript性能方面的最佳实践,并且还要获得更多基础知识。我的猜测是你使用select()方法使用$实用程序越多,使用$$实用程序越少,循环越少。下面的函数返回了正确的值,但我需要访问每个“domain div”中的其他元素。

function init() {
  $('domains').getElements().each(function(input){
    console.log($F(input));
  });
}

我想也许我应该使用$ F工具,但下面的函数返回了JS错误

  

未捕获的TypeError:无法读取未定义的属性'toLowerCase'

function init() {
  $('domains').select('div').each(function(domain){
    console.log($F(domain.select('input')));
  });
}

1 个答案:

答案 0 :(得分:2)

$ F()方法要求元素具有ID,或者已经被Prototype找到并扩展。这是这种结构的一个有用的快捷方式:$(id或reference)。getValue();

要做你在这之后所做的事情,你可以使用“双倍美元”方法,但是如果你用一个id开始它,它会接近,因为没有差别和“按ID查找,找到孩子”一样快“接近$(id).select()。

$$('#domains div input').each(function(elm){
  console.log($F(elm));
});

你的第二次尝试失败的原因是因为你正在使用select('input'),它总是返回一个数组作为结果。如果你使用了down('input'),那将返回输入本身,这将与$ F()一起使用。