【问题标题】:Selecting the closest input to adjust value选择最接近的输入来调整值
【发布时间】:2018-10-02 22:03:55
【问题描述】:

我有 3 个输入框,每个输入框上方都有单选按钮,用于填充框的值。每个框有 5 个单选按钮。每个框/按钮集应独立运行。它们是使用相同的类创建的,我根据带有 onclick 单选按钮侦听器的单选按钮调整输入框中的值,就像这样

document.getElementsByClassName('nyp-input')[0].value=this.value; 
document.getElementsByClassName('nyp-input')[1].value=this.value; 
document.getElementsByClassName('nyp-input')[2].value=this.value;

这不起作用,因为它会调整所有 3 个,但我需要它来仅调整最接近的输入。我已经尝试了以下

jQuery('input').closest('nyp').find('.nyp-input');
adj.value=this.value;

上下文中的完整 sn-p

<div class="nyp" data-price="0" data-max-price="" >
<div class="price-wrapper">
        <div class="donation-options">
        <label for="nyp-suggested-1">
            <input type="radio" name="nyp-suggested" value="20" id="nyp-suggested-1" onclick="
                var adj = jQuery('input').closest('nyp').find('.nyp-input');
                adj.value=this.value;                   
            "> $20
        </label>
        <label for="nyp-suggested-2">
            <input type="radio" name="nyp-suggested" value="50" id="nyp-suggested-2" onclick="document.getElementsByClassName('nyp-input')[0].value=this.value; document.getElementsByClassName('nyp-input')[1].value=this.value; document.getElementsByClassName('nyp-input')[2].value=this.value;"> $50
        </label>
        <label for="nyp-suggested-3">
            <input type="radio" name="nyp-suggested" value="100" id="nyp-suggested-3" onclick="document.getElementsByClassName('nyp-input')[0].value=this.value; document.getElementsByClassName('nyp-input')[1].value=this.value; document.getElementsByClassName('nyp-input')[2].value=this.value;"> $100
        </label>
        <label for="nyp-suggested-4">
            <input type="radio" name="nyp-suggested" value="500" id="nyp-suggested-4" onclick="document.getElementsByClassName('nyp-input')[0].value=this.value; document.getElementsByClassName('nyp-input')[1].value=this.value; document.getElementsByClassName('nyp-input')[2].value=this.value;"> $500
        </label>            
    </div>
</div>      

<label for="nyp">
        Other ( $ ) </label>

<input id="nyp" name="nyp" type="text" value="0.00" title="nyp" class="input-text amount nyp-input text">

如何获得最接近的 nyp-input 来调整值。

【问题讨论】:

  • 你分享了完整的代码吗?因为我只能看到一个输入文本框。
  • 都是完整sn-p的重复对象。如中,完整的 sn-p 重复 3 次,用于 3 个不同的部分。假设,正确的代码应该对一三个相同的工作,尽管它应该知道其他两个的存在以免与它们混淆

标签: javascript jquery html


【解决方案1】:

试试这个代码

$(function(){
	$('.nyp-radio').click(function(){
    	$(this).parents('.price-wrapper').children('[type="text"]').val($(this).val());
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nyp" data-price="0" data-max-price="" >
<div class="price-wrapper">
        <div class="donation-options">
        <label for="nyp-suggested-1">
            <input type="radio" class='nyp-radio' name="nyp-suggested" value="20" id="nyp-suggested-1" > $20
        </label>
        <label for="nyp-suggested-2">
            <input type="radio" class='nyp-radio' name="nyp-suggested" value="50" id="nyp-suggested-2" > $50
        </label>
        <label for="nyp-suggested-3">
            <input type="radio" class='nyp-radio' name="nyp-suggested" value="100" id="nyp-suggested-3" > $100
        </label>
        <label for="nyp-suggested-4">
            <input type="radio" class='nyp-radio' name="nyp-suggested" value="500" id="nyp-suggested-4" > $500
        </label>            
    </div>
    <label for="nyp">
        Other ( $ ) </label>

<input id="nyp" name="nyp" type="text" value="0.00" title="nyp" class="input-text amount nyp-input text">
</div>


<div class="nyp" data-price="0" data-max-price="" >
<div class="price-wrapper">
        <div class="donation-options">
        <label for="nyp-suggested-11">
            <input type="radio" class='nyp-radio' name="nyp-suggested1" value="20" id="nyp-suggested-11" > $20
        </label>
        <label for="nyp-suggested-12">
            <input type="radio" class='nyp-radio' name="nyp-suggested1" value="50" id="nyp-suggested-12" > $50
        </label>
        <label for="nyp-suggested-13">
            <input type="radio" class='nyp-radio' name="nyp-suggested1" value="100" id="nyp-suggested-13" > $100
        </label>
        <label for="nyp-suggested-14">
            <input type="radio" class='nyp-radio' name="nyp-suggested1" value="500" id="nyp-suggested-14" > $500
        </label>            
    </div>
    <label for="nyp">
        Other ( $ ) </label>

<input id="nyp" name="nyp" type="text" value="0.00" title="nyp" class="input-text amount nyp-input text">
</div>

【讨论】:

  • 你试过 nyp-input(最后一行)在 div 里面有类 price-wrapper(第二行)
  • 我更改了这个示例以便在 sn-p 上运行它,试试这个
  • 我可以看到它在 sn-p 中确实有效。我不知道如何在名称的末尾添加序列号。因为你的都是不同的。这就是为什么你的有效而我的仍然无效的原因吗?
【解决方案2】:

您可能遇到的问题是 3 个“输入框”包含具有相同 ID 的输入(基本上您有 nyp-suggested-1 3 次)。您应该尝试生成不同的 ID,为每个组保持相同的名称,但组之间不同 - 示例:

组1:

        <label for="nya1">
            <input type="radio" name="nya" value="20" id="nya1" > $20
        </label>
        <label for="nya2">
            <input type="radio" name="nya" value="50" id="nya2" > $50
        </label>
        <label for="nya3">
            <input type="radio" name="nya" value="100" id="nya3" > $100
        </label>
        <label for="nya4">
            <input type="radio" name="nya" value="500" id="nya4" > $500
        </label>  

第 2 组:

    <label for="nyb1">
            <input type="radio" name="nyb" value="20" id="nyb1" > $20
        </label>
        <label for="nyb2">
            <input type="radio" name="nyb" value="50" id="nyb2" > $50
        </label>
        <label for="nyb3">
            <input type="radio" name="nyb" value="100" id="nyb3" > $100
        </label>
        <label for="nyb4">
            <input type="radio" name="nyb" value="500" id="nyb4" > $500
        </label>               

然后你可以在jquery中根据组名进行选择并使用相同的值进行更新。

【讨论】:

  • 是的,我明白这一点,不幸的是,这是不可能的
  • 好吧,问题是在浏览器后面的某个地方看到两个具有相同 ID 的元素作为同一个元素(更新传播到具有相同 ID 的所有元素),我知道前一段时间我发现了这个信息在某处,我会检查我是否还有这篇文章..
  • 是的,我需要放弃使用 id 并根据元素的接近度找到相对命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多