【问题标题】:Cycling values in a hidden field on image click单击图像时在隐藏字段中循环值
【发布时间】:2011-09-29 17:17:20
【问题描述】:

我希望有人可以帮助我。我是 jquery 的新手。我想在一个页面上展示我的学生的照片,这样我就可以轻松地在场。我使用带有 php 的 MySQL DB 做到了这一点。这是最简单的部分。

接下来,我设法制作了一个 jquery 脚本,因此当我单击每个图像时,该图像的边框会在绿色、红色和黄色之间循环(输入 - 输出 - 后期 css 类)。

这是html代码(隐藏字段中的id是学号)

<div class="presences-container">
    <ul>
        <li class="presences-image in"><img src="7465.jpg">
        <input type="hidden" id="7465" name="presence2" value="in"/></li>
        <li class="presences-image out"><img src="9484.jpg">
        <input type="hidden" id="9484" name="presence3" value="in"/></li>
        <li class="presences-image late"><img src="2627.jpg">
        <input type="hidden" id="2627" name="presence4" value="in"/></li>
    </ul>
</div>

还有 jQuery

$(document).ready(function() {

$('li').toggle(
 function() {
 $(this).toggleClass('in out');
 $(this).removeClass('in');
 ;}, 
 function() {

 $(this).toggleClass('out late');
 $(this).removeClass('out');
 },
 function() {
 $(this).toggleClass('late in');
 $(this).removeClass('late');
 }
 );

});

现在,我想使用 jquery 根据图像的状态(在 ou 中或后期)设置每个隐藏字段值,并提交所有隐藏字段以将其放入我的数据库中。

希望我已经足够清楚了!

提前感谢您的帮助!!

弗朗索瓦

【问题讨论】:

    标签: jquery html hidden-field


    【解决方案1】:

    &lt;li&gt;s 被点击时,您可以使用类似这样的代码来更新相应的hidden 字段 -

    var hiddenid = $(this).find('img').attr('src').replace(".jpg",""); 
    $("#" + hiddenid).val($(this).attr('class').split(' ').splice(-1));
    

    然后您可以像这样序列化隐藏的输入值 -

    vat hiddenvals = $("input[type=hidden]").serialize();
    

    然后使用“post”或“ajax”方法将您的服务器发回给您。

    【讨论】:

    • 谢谢!我必须在提交操作中序列化值吗?我必须在提交按钮上添加一个 jQuery 函数?
    • 一切都很好! :) 我找到了 form.submit 函数 :) 谢谢!
    【解决方案2】:

    这是你想要的吗?

    只需将类型更改为隐藏

    Live demo

    html:

    <div class="presences-container">
    <ul id="ulPics">
        <li class="presences-image in"><img src="7465.jpg">
        <input type="text" id="7465" name="presence2"/></li>
        <li class="presences-image out"><img src="9484.jpg">
        <input type="text" id="9484" name="presence3"/></li>
        <li class="presences-image late"><img src="2627.jpg">
        <input type="text" id="2627" name="presence4"/></li>
    </ul>
    

    js:

    $("#ulPics li input").each(function(){
          $(this).val($(this).parents('li').attr("class").split(" ")[1]);
    });
    

    【讨论】:

      【解决方案3】:

      据我了解,这样的事情应该可以解决问题:

      var states = $(['late','out','in']);
      
      $('li').click(function() {
      
          var $this = $(this),
              $hiddenField = $this.find('input:hidden'),
              idx = $.inArray($hiddenField.val(), states);
      
          // update hidden field
          $hiddenField.val(states.get(--idx));
      
          // update li
          $this.removeClass('in out late').addClass($hiddenField.val());
      
      });
      

      jsFiddle

      【讨论】:

      • 非常感谢!它正在工作,但是当值迟到时,如果再次单击,我该如何恢复?我的意思是它不会在第三次点击时回到初始状态...:/
      • $(document).ready(function() { var states = $(['late','out','in']); $('li').click(function( ) { var $this = $(this), $hiddenField = $this.find('input:hidden'), idx = $.inArray($hiddenField.val(), states); if(idx == 0) { idx = 3; } // 更新隐藏字段 $hiddenField.val(states.get(--idx)); // 更新 li $this.removeClass('in out late').addClass($hiddenField.val()) ; alert(idx); }); });
      • 当您进入“延迟”时,它应该在下一次迭代中自动循环回到“进入”。我们使用 jQuery 包装的数组(而不仅仅是一个普通数组)的原因是 $().get() 允许您传入一个 负索引,它实际上是反向遍历数组(你不能用array[-1]之类的东西来做到这一点。当您的索引为 0 时,下一次迭代将为您提供 -1 的索引,这应该为您提供“in”。无需更改代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2014-06-02
      • 2016-02-02
      相关资源
      最近更新 更多