【问题标题】:Is there a reason this doesn't work?有没有理由这不起作用?
【发布时间】:2009-09-02 01:10:11
【问题描述】:

一个简单的 HTML 表单:

<form enctype="application/x-www-form-urlencoded" method="post" action="/view/album/id/4"><ol>
<li class="no-padding"><div class="element">

<input type="hidden" name="media" value="" id="media" /></div></li>
<li class="no-padding"><div class="button">
<input type="submit" name="add_to_favorites" id="add_to_favorites" value="Add To Favorites" /></div></li></ol></form>

JQuery:

$('#add_to_favorites').hover(function() {
    var id = 10;
    // alert(id);
    $('#media').val(id);
});

这基本上意味着当您将鼠标悬停在表单的提交按钮上时,jQuery 会将 10 设置为 #media 隐藏字段的值。

当我点击提交按钮时,隐藏字段返回 NULL:

var_dump($_POST);
// this will return:
// array(2) { ["media"]=>  NULL ["add_to_favorites"]=>  NULL }

编辑:

我用 alert() 测试了 "var id" 的值和隐藏字段的值,它们设置正确。

EDIT2:

页面上也触发了一个click()事件,完整代码如下:

$(document).ready(function() {
    $('.box-content2 a').click(function() {
        var path = $(this).attr('href');
        var title = $('img', this).attr('alt');
        var id = $(this).attr('id');
        $('#media-photo img').attr('src', path);
        $('#media-photo img').attr('alt', title);
        $('#media-photo img').attr('id', id);
        return false;
    });

    $('#add_to_favorites').hover(function() {
        var id = 10;
        $('#media').val(id);
    });
});

【问题讨论】:

  • 等一下。所以你已经检查了隐藏字段的值设置正确吗?那么是提交点击事件导致该值再次为空?
  • 您是否尝试将其更改为 .click 而不是 .hover,以查看它是否适用于单击事件?也许问题在于悬停。
  • 我测试了您的表单代码和 jQuery,它在我的测试页面上运行良好。是否触发了任何 onsubmit 事件?
  • @zombat:不。只触发了另一个 click() 事件,这应该不是问题,但我会将其添加到我的帖子中。
  • 有趣的是提交按钮也是NULL。

标签: php javascript jquery


【解决方案1】:

原因是 Val() 仅获取第一个匹配元素的输入值,因此您不能使用它来将单个属性设置为值,要在匹配元素上设置属性,请使用 attr 函数,如 attr (键,值)

更多详情请查看thisthis

【讨论】:

  • 来自您的第二个链接: val( val ) 设置每个匹配元素的 value 属性。在 jQuery 1.2 中,这也可以设置选择元素的值,但选择适当的选项。
  • 嗯??这完全是错误的。 Val() 从输入元素中获取值; val(arg) 为输入元素设置一个值。然后,该设置值应该可用于表单帖子。它在您刚刚链接到的同一文档中。
  • @John Fisher:这对我的回答有什么影响?
  • 糟糕。我专注于答案的“第一个匹配的元素,所以你不能”部分,错过了“不能使用它来设置”,无论如何这是错误的。
【解决方案2】:

您应该为悬停事件定义两个函数。一个用于鼠标悬停,一个用于鼠标悬停。因此,您的悬停事件将如下所示:

$('#add_to_favorites').hover(function() {
    var id = 10;
    // alert(id);
    $('#media').val(id);
}, function() {
    // Probably do nothing here.
});

也许你最好绑定到鼠标悬停事件?

【讨论】:

  • 这不是问题(您不必为 mouseout 定义函数) - 当我也为 mouseout 定义函数时,它仍然返回 NULL。
猜你喜欢
  • 2012-11-19
  • 2014-03-06
  • 2023-04-02
  • 2019-12-21
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多