【问题标题】:Know which line was clicked within the php loop知道在 php 循环中点击了哪一行
【发布时间】:2016-10-22 17:48:30
【问题描述】:

我在 php 中有一个 while 循环,它会从我的 mysql 数据库中返回一些数据,

这个循环创建了几个 ul 动态读取,返回我在银行调查的行,

每行返回 1 个按钮和一个隐藏的输入类型,其中包含其值的链接,

我想知道每个点击按钮的链接。

例如列表返回 10 行

每一行都会有一个隐藏的输入与链接的值

我想知道链接主页值是多少,所以我点击按钮 btlink

Example

<Ul>
    <?php while ($ videolist = $ resultvideos-> fetch_array ()) {?>
    <Li>
        <Ul>
            <Li class = "listdivvideos">
                <Button class = "btlink" id = "btlink"> </ button>
            </ Li>
            <Li>
                <Input type = "hidden" class = "linkvd" value = "<? Php echo $ videolist [ 'link']?>"> </ Input>
            </ Li>
        </ Ul>
    </ Li>
</ Ul>
<? Php}?>

我尝试使用此代码,但它只返回第一个链接

$('.listdivvideos').on('click', function(){
      var linkdovideo = $('.linkvd').attr('value');
      alert(linkdovideo);
});

【问题讨论】:

  • 注意:input elements 是 void elements&lt;/input&gt; 总是不正确的。如果您使用 HTML,只需写 &lt;input ...&gt;。 (如果你在写 XHTML,你会写 &lt;input ... /&gt;,但你不是。)

标签: javascript php jquery html mysql


【解决方案1】:
$('.listdivvideos').on('click', () => {
  var linkdovideo = $(this).find('.linkvd').attr('value');
  alert(linkdovideo);
});

【讨论】:

    【解决方案2】:

    Boris' answer 是迄今为止最好的方法,如果你可以改变结构的话。 (除非我不会在那里使用.data。)

    如果你做不到,你也不会太远:

    $('.btlink').on('click', () => {
    // ^^^^^^^--- (1)
        var linkdovideo = $(this).closest("ul").find(".linkvd").val();
    // (2) -----------------^     ^             ^               ^
    // (3) ----------------------/             /               /
    // (4) -----------------------------------/               /
    // (5) --------------------------------------------------/
        alert(linkdovideo);
    });
    
    1. 处理按钮的点击,而不是li

    2. this 是被点击的button

    3. 然后我们通过.closest("ul") 上到它的ul

    4. 使用find 可以让我们找到.linkvd ul

    5. .val() 获取其当前值。使用input 元素,您几乎不需要.attr("value"),因为这不是元素的当前 值,而是元素的默认 值。 (令人困惑,我知道。)现在,如果您从不更改代码中的该值,它会在这里工作,因为它是一个隐藏元素,但通常最好养成使用 .val() 输入的习惯。


    旁注:注意:inputelements 是 void elements&lt;/input&gt; 总是不正确的。如果您使用 HTML,只需写 &lt;input ...&gt;。 (如果你在写 XHTML,你会写 &lt;input ... /&gt;,但你不是。)

    【讨论】:

      【解决方案3】:

      由于按钮和隐藏输入之间没有直接关系,只是它们在同一个 ul 容器中,您可以这样做:

      $('.listdivvideos').on('click', '.btlink', function {
          var link= $(this).closest('ul').find('.linkvd').val();
          alert(link);
      });
      

      【讨论】:

        【解决方案4】:

        首先你不需要输入元素,你可以这样做:

        <?php while ($ videolist = $ resultvideos-> fetch_array ()) { ?>
        <li>
            <button class="btlink" data-value="<?php echo $ videolist['link'] ?>">Click me</button>
        </li>
        <?php } ?>
        

        然后在你的 jQuery 代码中:

        $(".btlink").click(function() {
            alert($(this).data("value"));
        });
        

        【讨论】:

        • 当然,如果这些输入不用于其他任何用途(而且没有名字,这似乎很可能)。
        • Quib​​ble:除非 OP 真的需要 data 的功能,否则只检索单个属性:.attr("data-value") 是多余的。
        • @T.J.Crowder 你能解释一下为什么data 是矫枉过正,为什么你不会在这种情况下使用它?谢谢!
        • @BorisSavic: data 为元素初始化 jQuery 的数据缓存,查看所有 data-* 属性,解析它们的值,并将它们添加到该数据缓存中,然后保存元素存在。如果目标只是获取data-value 属性,则无需执行所有这些操作并将结果保存在内存中,只需.attr("data-value") 即可。 (对一个好答案的小问题。)
        猜你喜欢
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 1970-01-01
        • 2017-11-17
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多