定位多个相似项目组中的事件

时间:2018-10-29 14:28:00

标签: javascript jquery jquery-selectors frontend

我需要你的帮助。

我正在创建重新组合多个选择和输入的组件,我从中获取值以将它们连接到预览区域中的字符串中。每次这些输入/选择发生更改时,都会更新此字符串。 当我处理一个元素,进行实验,对其进行样式化和填充时,它工作得很好。现在,我必须将其复制到无限数量,因此脚本必须相应地工作。问题是,当涉及到目标选择器“ this”,“ closest”和“东西”时,我毫无用处。而且我敢肯定,在获取值(如您在我编写的代码中所看到的)方面,我的逻辑存在缺陷。

我将分享JSFiddle,我认为它会更容易理解。如果没有,我将编辑这篇文章并直接分享。

也许我应该声明一个包含诸如[var route = $(this).parent()。closest()]之类的目标的变量,并将其用于所有其他变量?

https://jsfiddle.net/HiD3f/8Lnowqvp/65/

<div class="container" id="settings-fr">

  <div class="group"> 
    <select class="day">
      <option value="1">Monday</option>
      <option value="2">Mon</option>
      <option value="3"> </option>
    </select>
  </div>

  <div class="group small-group"> 
    <input type="text" class="separator1">
  </div>

  <div class="group"> 
    <select class="date">
      <option value="1">October 29</option>
      <option value="2">Oct 29</option>
      <option value="3">10 29</option>
      <option value="1">29 October</option>
      <option value="2">29 Oct</option>
      <option value="3">29 10</option>
    </select>
  </div>

  <div class="group small-group"> 
    <input type="text" class="separator2">
  </div>

  <div class="group"> 
    <select class="year">
      <option value="1">2018</option>
      <option value="2">18</option>
      <option value="3"> </option>
    </select>
  </div>

  <div class="preview"> preview </div>

</div>


<div class="container" id="settings-us">

  <div class="group"> 
    <select class="day">
      <option value="1">Monday</option>
      <option value="2">Mon</option>
      <option value="3"> </option>
    </select>
  </div>

  <div class="group small-group"> 
    <input type="text" class="separator1">
  </div>

  <div class="group"> 
    <select class="date">
      <option value="1">October 29</option>
      <option value="2">Oct 29</option>
      <option value="3">10 29</option>
      <option value="1">29 October</option>
      <option value="2">29 Oct</option>
      <option value="3">29 10</option>
    </select>
  </div>

  <div class="group small-group"> 
    <input type="text" class="separator2">
  </div>

  <div class="group"> 
    <select class="year">
      <option value="1">2018</option>
      <option value="2">18</option>
      <option value="3"> </option>
    </select>
  </div>

   <div class="preview"> preview  </div>

</div>

和脚本:

$('select, input').change(function() {

  let day = $(".day option:selected").text();
  let sep1 = $(".separator1").val();
  let date = $(".date option:selected").text();
  let sep2 = $(".separator2").val();
  let year = $(".year option:selected").text();

  let preview = day + sep1 + date + sep2 + year;

  let parent = $(".container");

  $(this).parent('.group').closest(".preview").empty().append(preview);

});

请帮助我,我被困住了。谢谢。

2 个答案:

答案 0 :(得分:1)

更改您的行

$(this).parent('.group').closest(".preview").empty().append(preview);

$(this).parents()
  .filter(function() {
    return (this.getAttribute('class') === 'container');
  }).find('.preview').text(preview); 

答案 1 :(得分:1)

更改您的逻辑以根据他们所在的部分查找孩子。

$('select, input').change(function() {
  //find the container the changed element belongs to
  let $container = $(this).closest('.container');
  let day = $container.find('.day option:selected').text();
  let sept = $container.find('.separator1').val();
  
  //...
});