1

我有一段 javascript 设置数字输入值。但是,它不会起作用。调用后输入的值字段仍然为空(尽管输出元素的 val() 的 console.log() 确实显示了正确的值)。我已经尝试通过 jQuery 的 .val(total)、.attr('value', total) 和普通的旧 .value = 三种方式设置值,但仍然没有。我什至用 html 替换了整个元素,并将值连接到 value 属性中,但它不起作用。

任何想法为什么这不会?

这是标记:

<div id="proposal_price_box">
  <div class="proposal_price_header sys_bkgcolor">
    <span class="title"><h3>Price to Appear on Proposal</h3></span>
  </div>
  <div class="inner">
    <span class="label">$</span>
    <input type="number" class="amount-input" id="proposal_price" value=""/>
  </div>
</div>

和相关的javascript:

$('#proposal_price').val('1234');

Jsfiddle 演示了下面的问题。

http://jsfiddle.net/n8z9K/12/

不知何故,如果元素的容器被显示,它会设置值。但是一旦它再次隐藏,它就会破裂。

编辑抱歉,我没有在 JSfiddle 中正确演示该问题。我正在尝试克隆容器的内容并将其放置在其他地方。我已经更新了 jsfiddle 以更好地显示问题。

4

2 回答 2

2

输入节点的值与其值属性之间存在差异。当您使用 val() 方法分配它的值时,您设置的是它的值,而不是它的 value 属性。当您使用 html() 方法时,您将获得具有所有属性(包括 value 属性)的 html,但该属性并未通过您的 val() 分配而改变。只有节点的值发生了变化。

于 2013-02-07T17:00:26.580 回答
0

你做#proposal_price { display: none; }。如果你是那个元素,它会保持相同的 ID(这实际上是无效的,但现代浏览器可以处理这个)。因此,它仍然是隐藏的,因为display: none;您应该删除克隆的 ID,否则克隆也不会显示。

是的,这个 jQuery 似乎解决了它:

$(document).ready(function() {
    $('#proposal_price').val('123');
    console.log("before clone");
    clone = $('#proposal_container').clone();
    clone.attr("id", "");
    console.log("after clone");
    $('body').append(clone.html());
});
于 2013-02-07T17:18:55.367 回答