【问题标题】:jQuery How to clear / replace the stored value in a variable (got from .val() )jQuery 如何清除/替换变量中的存储值(来自 .val() )
【发布时间】:2013-04-23 06:00:43
【问题描述】:

感谢之前的所有帮助,我已经走到了这一步:我能够在表格中添加行并选择一个选项并显示一个文本输入。 这是Fiddle link。以前我使用多选,但我现在改为单选,因为多选导致显示我的“输出类型”出现问题(也许你可以提出更好的方法;))

现在我面临另一个问题,即存储在变量中的值不会被新的输入值替换。因此,“输出编号”列将只显示输入的第一个数字。另一个奇怪的事情是,它只能从“区域输入”接收/更新输入,因为它被放置在 html div 的第一个位置。我试图将其他人更改为顶部,同样的事情也发生了。

var textInput = "";
$('.TextInput').empty();
textInput = $('.TextInput').val();

我尝试了.empty(),但正如您所见,它不起作用。每个 div 都有不同的 ID。但是,如果我使用 ID,就像我之前测试过的那样,var textInput = $('#outputTextInput').val();,我怎么能为其他人做同样的事情?我是否使用或|| 喜欢 var textInput = $('#outputTextInput').val() || $('#zoneTextInput').val();?

另外,我必须为“Arm”创建另一个函数,因为它使用的是复选框而不是文本输入吗?

更新:这有效,但不适用于我的程序 :((http://jsfiddle.net/yvonnezoe/MKfLU/1/

更新:我发现了这个问题!在这里查看我的问题:jQuery vs jQuery Mobile - Does the script sequence matter?

【问题讨论】:

  • $('.TextInput') 使用 class="TextInput" 抓取所有内容。你确定这就是你想要的吗?
  • :哦,对,但不,这不是我想要的。我认为使用 ID 会很乏味......而且我不太确定如何用各自的 ID 替换 .TextInput
  • 从 ID 开始通常是个好主意。然后你使用 css 选择器规则来选择你想要的元素。所以你会做类似 $('#sensorText input.TextInput')
  • 所以你的意思是我应该使用 OR 语句?但它仍然是一样的...jsfiddle.net/yvonnezoe/6bEDH 只有第一个(在这种情况下为 sensorTextInput)可以更新值...
  • textInput=$(this).prev().val();就是你所需要的。

标签: jquery variables text input


【解决方案1】:

尝试在您的代码中替换此行:

$('.TextInput').empty();
textInput =  $('.TextInput').val();

有了这个:

$('.TextInput').not($(this).prev('.TextInput')).val('');
textInput =  $(this).prev('.TextInput').val();

然后再试一次...

这是您的标记:

<input type="text" class="TextInput" id="zoneTextInput" value="">
<input type="submit" class="add" value="Add" />

现在,当您单击类 add 的添加按钮时,$(this) 表示当前范围内的元素,$(this).prev('.TextInput') 表示它之前的元素,类为 TextInput(这里,输入文本框)。因此,$(this).prev('.TextInput').val() 将通过您单击的添加按钮为您提供当前文本框的值。而$('.TextInput').val() 为您提供第一个元素的值,无论单击哪个添加按钮。

更多详情:prev()not()

【讨论】:

  • 谢谢!它适用于小提琴,但不适用于我的程序:(现在它不能添加任何东西。知道为什么吗?
  • 我不太确定你到底出了什么问题。可能是 Fiddle 中的标记和您的程序中的标记不同?不看你的代码就什么也说不出来:(
  • :( 嗯,这很奇怪,但无论如何你介意解释你的代码吗?:) 我不太明白 $(this).prev
  • 感谢您的解释。这就说得通了! :D 但奇怪的是它在我的真实程序中不起作用:((
  • 不确定您的程序中发生了什么.. :(
【解决方案2】:

textInput=$(this).prev().val();之所以有效,是因为在 click 事件中, this 指向按钮, prev 选择 dom 中的前一个元素(在本例中为 input 元素),然后 .val() 选择它的值。哪一部分还不行?

【讨论】:

  • 是的,它在这个小提琴jsfiddle.net/yvonnezoe/MKfLU/3 中运行良好,但在我的整个程序中却不行:jsfiddle.net/yvonnezoe/MKfLU/2
  • 知道为什么它在我的网络应用程序上给出“未定义”但在小提琴上没有?
  • 它现在在 Fiddle 上也未定义:/jsfiddle.net/yvonnezoe/7NZzr
  • 你需要明白什么是 $(this).prev().val();应该做的。您的 prev() 不再是输入。关键是从添加按钮 $(this) 导航 dom。在您最近的示例中, prev() 指向一个跨度。这样就不再起作用了,但是 jquery 提供了允许您从添加按钮获取输入的功能,以便您可以获取值。
猜你喜欢
  • 1970-01-01
  • 2012-07-30
  • 2018-01-31
  • 2011-01-24
  • 2011-05-17
  • 2023-03-09
  • 2017-11-18
  • 2014-09-01
  • 1970-01-01
相关资源
最近更新 更多