为什么我不能使用.val()更改此输入的值?

问题描述:

我正在尝试更改此禁用输入的值。我想也许它被禁用的事实是问题,所以我手动删除了禁用的属性(如果你想知道为什么它不再被屏蔽截图)。请参见下面的图片:为什么我不能使用.val()更改此输入的值?

enter image description here

从什么控制台返回它似乎是正确的选择输入,但即使启用了输入的输入值保持空白。我究竟做错了什么?

+0

什么是长选择器?你可以这样做:'$('。add-btn:first')。next()。find('input.product')。val(...)' – elclanrs 2012-07-27 02:28:53

+0

感谢您的图像,但请包括选择器也作为文本 - 使测试和改进代码变得更加容易。 – 2012-07-27 04:37:43

我可以告诉你,我有simmilar的问题,并通过使用jQuery的ATTR方法得到角落找寻他们。它可以将任意HTML属性设置为任何你想要的。查看更多这里:http://api.jquery.com/attr/

+1

+1我不知道为什么,但'attr'在这里'val'和'prop'均失败。这么奇怪。 – Muhd 2012-07-27 18:53:55

+0

这不是100%,但我认为这与jQuery选择器如何返回元素有关。当你有可能返回多个元素时,我发现'.val'往往失败的频率往往不是。 – dykeag 2012-07-27 20:23:27

+0

一个工作示例除了提供'attr'链接之外还有帮助。尽管谢谢! – 2015-08-31 09:33:33

我认为你正在寻找的.prop()代替.val()

+0

我测试过,没有什么区别。 '.val()'应该在这里工作。 – Muhd 2012-07-27 18:36:03

不确定页面的其余部分是什么样子,但我可以看到你嵌套表 - 可能会导致混淆和意外的结果,尤其是对于隐藏的嵌套表。你打算在用户点击add-btn时显示隐藏的表格吗?如果是这样,为什么不通过在点击事件中查找文本按钮,相对于单击的按钮?

$(".add-btn").click(function(evt){ 
    var product = getProductNameSomehow(); // Up to you 

    var newContainer = $(this).siblings("table").find(".new-row-html"); 
    newContainer.find("input.product").val(product); 

    evt.preventDefault(); 
    return false; 
}); 

您可以使用$(...).on("click", ...)来改进和推广此示例侦听器。 .a-btn可能会更好,因为<button type="button">Add</button>,也许styled as a link,如果这是你想要的,所以你不必担心停止点击事件。