代码之家  ›  专栏  ›  技术社区  ›  xain

从原型中选定的复选框获取innerHTML文本

  •  1
  • xain  · 技术社区  · 14 年前

    我需要从表单中选中的复选框中获取文本。如果表格是:

    <form action="save" method="post" name="reunform" id="reunform" >
     <div id="listad">
      <ul id="litemsd">
       <li class="litemd"><input type="checkbox" name="d1" />Number One</li>
       <li class="litemd"><input type="checkbox" name="d2" />Numer Two</li>
       <li class="litemd"><input type="checkbox" name="d3" />Numer Three</li>
      </ul>
     </div>
     ...
    </form>
    

    使用Prototype:如果选择这些,如何获取字符串“1号\n 3号”?

    为了测试我试过的东西:

    $$('li.litemd').pluck('checked').each(function(s) {
        alert(s.innerHtml)
      });
    

    但我在firebug中得到了“s是未定义的”。

    谢谢

    2 回复  |  直到 14 年前
        1
  •  1
  •   Josh Stodola    14 年前

    首先,你应该使用 <label> 复选框文本上的标记。这是一个可访问性问题。使用标签还有一个额外的好处,就是可以单击标签文本来选中该框,这是许多用户(包括我在内)已经习惯的。。。

    <ul id="litemsd">
      <li class="litemd">
        <input type="checkbox" id="d1" name="d1" />
        <label for="d1">Number One</label>
      </li>
      <li class="litemd">
        <input type="checkbox" id="d2" name="d2" />
        <label for="d2">Numer Two</label>
      </li>
      <li class="litemd">
        <input type="checkbox" id="d3" name="d3" />
        <label for="d3">Numer Three</label>
      </li>
    </ul>
    

    作为一个额外的好处,这使您的代码更容易。。。

    $$('li.litemd input:checked').each(function(s) {
      alert(s.next().innerHTML)
    });
    
        2
  •  0
  •   koko    14 年前

    你要找的是HTML,不是输入。

    1,但不是那么漂亮:

    $$('li.litemd').pluck('checked').each(function(s) {
        alert(s.up().innerHtml.split('/>')[1])
    });
    

    2.将文本加粗

    <li class="litemd"><input type="checkbox" name="d1" /><div>Number One</div></li>
    <li class="litemd"><input type="checkbox" name="d2" /><div>Numer Two</div></li>
    <li class="litemd"><input type="checkbox" name="d3" /><div>Numer Three<div></li>
    

    然后

    $$('li.litemd').pluck('checked').each(function(s) {
        alert(s.next().innerHTML)
    });