【问题标题】:Finding value of textbox in same row as clickable element using jquery使用jquery在与可点击元素相同的行中查找文本框的值
【发布时间】:2013-09-12 04:21:16
【问题描述】:

我有一个 HTML 表格。在每一行中,我都有一个“添加”按钮以及一个数量输入框、型号#、型号描述和价格。单击该按钮时,我会触发一个 onclick 事件,该事件会触发我们的分析跟踪功能。

单击添加按钮时,我需要从单击“添加”按钮的同一行的文本框中获取数量。目前,唯一返回的元素是表的第一行。我尝试了几种使用 .click、.live 和 .on 以及 .closest 的方法。

这是代码,我希望有人能帮助我,因为我在试图获得这个值时迷失了方向。

HTML

<table id="ElementCount10">
    <thead>
        <tbody>
            <tr class="odd">
                <td class="image">
                    <div class="modelphoto link"><a rel="#"><img class="modelthumb" alt="" src="image.jpg"></a></div>
                </td>
                <td class="model sorting_1">
                    <a class="sku" href="#">Sample Part</a>
                </td>
                <td class="descript" rowspan="1" colspan="1">Part Description</td>
                <td class="avail"><span class="instock">In Stock</span></td>
                <td class="price">$318.00</td>
                <td class="cart">
                    <input type="hidden" name="labelid" value="1234567">
                    <input type="hidden" name="productid" value="Part Number">
                    <input class="qty" type="text" name="quantity" value="" size="2" maxlength="3">
                    <a class="btn-primary" href="#" onclick="SiteCatalystSingleTracking('SingleAddToCart',1,this,event.target.nodeName);return false;">
                </td>
            </tr>
            <tr class="even">
                <td class="image">
                    <div class="modelphoto link"><a rel="#"><img class="modelthumb" alt="" src="image.jpg"></a></div>
               </td>
               <td class="model sorting_1"><a class="sku" href="#">Part Number</a></td>
               <td class="descript" rowspan="1" colspan="1">Part Description</td>
               <td class="avail"><span class="instock">In Stock</span></td>
               <td class="price">$371.00</td>
               <td class="cart">
                   <input type="hidden" name="labelid" value="1234567">
                   <input type="hidden" name="productid" value="Part Number">
                   <input class="qty" type="text" name="quantity" value="" size="2" maxlength="3">
                   <a class="btn-primary" href="#" onclick="SiteCatalystSingleTracking('SingleAddToCart',1,this,event.target.nodeName);return false;">
               </td>
          </tr>

JS

function SiteCatalystSingleTracking(carttype, requiredamt, $this, thisTarget) { // $this is the actual table to process
    var parts = '';
    var node = "";
    var parent_path = '';
    alert("T:" + thisTarget);
    thisNewTarget = $(thisTarget).parents("td.cart").children("input[name=quantity]").val();
    alert("NT: " + thisNewTarget);
    parent_path = $($this).parents("table").attr("id");
    var sku = $("#" + parent_path + " tbody tr .cart").children("input[name=productid]").val();
    var qty = $("#" + parent_path + " tbody tr .cart").children("input[name=quantity]").val();
    var labelid = $("#" + parent_path + " tbody tr .cart").children("input[name=labelid]").val();
 }

我真的需要一些帮助。任何事情都会很棒!

-希瑟熊

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:
    $($this).closest("tr").find("input[name=quantity]").val();
    

    虽然你真的不应该将你的参数命名为$this,因为它不是一个jquery 对象而是一个DOM 元素。这真的很令人困惑。

    【讨论】:

    • 谢谢詹姆斯!这对我有用。我知道您不应该将 jquery 与 DOM 混合使用,但我收到了这袋蠕虫并且必须处理它。
    • @HeatherRoberts 不客气。虽然我不是说不要混合,只是命名约定。通常以$ 开头的变量意味着它是一个jquery 对象。
    【解决方案2】:

    首先,我认识的大多数人都使用 jQuery 快门直接在 HTML 中查看附加到 DOM 元素的事件,就像您在这里所做的那样:

    <a class="btn-primary" href="#" onclick="SiteCatalystSingleTracking('SingleAddToCart',1,this,event.target.nodeName);return false;">
    

    我强烈建议不要这样做。

    我推荐的是这样的:

    <table id="ElementCount10">
        <thead>
            <tbody>
                <tr class="odd">
                    <td class="image">
                        <div class="modelphoto link"><a rel="#"><img class="modelthumb" alt="" src="image.jpg"></a></div>
                    </td>
                    <td class="model sorting_1">
                        <a class="sku" href="#">Sample Part</a>
                    </td>
                    <td class="descript" rowspan="1" colspan="1">Part Description</td>
                    <td class="avail"><span class="instock">In Stock</span></td>
                    <td class="price">$318.00</td>
                    <td class="cart">
                        <input type="hidden" name="labelid" value="1234567">
                        <input type="hidden" name="productid" value="Part Number">
                        <input class="qty" type="text" name="quantity" value="" size="2" maxlength="3">
                        <input type="button" value="Add" />
                    </td>
                </tr>
                <tr class="even">
                    <td class="image">
                        <div class="modelphoto link"><a rel="#"><img class="modelthumb" alt="" src="image.jpg"></a></div>
                   </td>
                   <td class="model sorting_1"><a class="sku" href="#">Part Number</a></td>
                   <td class="descript" rowspan="1" colspan="1">Part Description</td>
                   <td class="avail"><span class="instock">In Stock</span></td>
                   <td class="price">$371.00</td>
                   <td class="cart">
                       <input type="hidden" name="labelid" value="1234567">
                       <input type="hidden" name="productid" value="Part Number">
                       <input class="qty" type="text" name="quantity" value="" size="2" maxlength="3">
                       <input type="button" value="Add" />
                   </td>
              </tr>
    

    然后,在 JavaScript 中,我会做类似的事情

    <script>
      $().ready(function() {
        $('#ElementCount10').on('input:button','click',function(evt) {
          var quantity = $(this).closest('tr').find('input.qty)'.val();
          // Do you stuff with the value
        });
      });
    </script>
    

    【讨论】:

    • 我同意你的观点,但不幸的是,目前我无法修改超出今天的代码结构。
    • 那么,你需要修复代码,但不能修改代码?你被哪些部分卡住了?
    • 我被 A 标签上的 onclick 事件卡住了,并将所需的 JS 代码嵌入到 onclick 事件调用的函数中。
    • 另外,#ElementCount10 是一个动态值,每次都不一样。
    • 好吧,除了使用onclick、function等的实现细节,核心还是一样的:可以使用var quantity = $(this).closest('tr').find('input.qty)'.val();获取数量的值
    【解决方案3】:
    <script>
    $(document).ready(function(){
        $(".btn-primary").click(function(){
            qty = $(this).parents('.cart').find('.qty').val();
            alert(qty);
        });
    });
    </script>
    

    【讨论】:

      【解决方案4】:

      使用prev() 获取之前的输入,如下所示:

      $(document).ready(function(){
              $(".btn-primary").click(function(){
              alert($(this).prev('input[type=text].qs').val);
              });
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        • 2018-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        相关资源
        最近更新 更多