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

jquery:如何在单击按钮时获得最接近的值?

  •  0
  • nolabel  · 技术社区  · 15 年前

    我似乎不能让这个代码工作。 单击按钮时,如何获取最接近的.abc值?

    定义最近

    如果你点击“A:”所在的按钮,我想要10的值。 如果你点击“B:”中列出的按钮,我想要20的值。

    代码如下:

    <script type="text/javascript">
    $(function(){
    
     $('.test').click(function(){
      var value = $(this)
         .parent()
         .parent()
         .closest(".abc")
         .attr("value")
      alert(value);
      return false
     });
    
    });
    </script>
    <form name="myform">
    <table>
     <tr>
         <td>A:</td>
            <td><input type="text" class="abc" name="a" id="a" value="10" /></td>
            <td><input type="text" name="vbn" id="vbn" /></td>
            <td><input type="text" name="mkl" id="mkl" /></td>
            <td><input type="button" class="test" name="test" id="test" value="test" /></td>
            <td>B:</td>
            <td><input type="text" class="abc" name="b" id="b" value="20" /></td>
            <td><input type="text" name="ews" id="ews" /></td>
            <td><input type="text" name="hrs" id="hrs" /></td>
            <td><input type="text" name="ew3" id="ew3" /></td>
            <td><input type="text" name="3ws" id="3ws" /></td>
            <td><input type="button" class="test" name="test" id="test" value="test" /></td>
        </tr>
        <tr>
         <td>C:</td>
            <td><input type="text" class="abc" name="c" id="c" value="30" /></td>
            <td><input type="text" name="oiu" id="oiu" /></td>
            <td><input type="text" name="dfe" id="dfe" /></td>
            <td><input type="button" class="test" name="test" id="test" value="test" /></td>
        </tr>
        <tr>
         <td>D:</td>
            <td><input type="text" class="abc" name="d" id="d" value="40" /></td>
            <td><input type="button" class="test" name="test" id="test" value="test" /></td>
        </tr>
    </table>
    </form>
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   nickf    15 年前

    不久前,我写了一个插件,在这种情况下可能会有所帮助:它被称为nextall。

    您可以这样使用它:

    $(":button").click(function() {
        $(this).prevALL("td:has(.abc)").eq(0).find(".abc").val();
    });
    
        2
  •  3
  •   Russ Cam    15 年前
    $('input.test').click(function() {
    
        $(this).parent()
               .prevAll('td:has(input.abc)')
               .find('input.abc:last')
               .val();
    
    });
    

    这里有一个 Working Demo

        3
  •  0
  •   Brandon Belvin    15 年前

    尽管HTML代码的格式不正确,并且有多个元素具有相同的ID,但这个javascript代码并不像您想象的那样。提到 http://docs.jquery.com/Traversing/closest , closest() 从你所在的地方往上看。没有元素匹配 .abc 在树上任何按钮的正上方。你要找的是邻居而不是父母。

    我会尝试这样的方法:

    $(".test").click(function() {
      $(this).parent().parent().find(".abc").val();
    });
    

    但它并不能解决你的问题,在一个特定按钮附近有多个.abc。

    为什么不“正确”地编写代码,让一个按钮直接引用一个使用ID和多个类的字段?