javascript - jQuery 事件委托(delegate)不适用于点击 div

标签 javascript jquery html events event-delegation

我有一个这样的索引:

<body>
<div id="page-container">
  <div id="header">
    <div class="main">
      <div class="content">
        <div id="website-link"><a href=""></a></div>
        <div id="cart">
          <div class="price">120,00 €</div>
          <div class="cart-icon"><img src="img/cart.png" /></div>
          <div class="items">0</div>
        </div>
      </div>
    </div>
    <div class="bottom">
      <div class="content">
        <div id="bradcrumbs">3D TOOL &gt; Upload &gt; <span class="active"> Customize</span></div>
        <div id="menu">
          <ul>
            <li><a href="">Help</a></li>
          </ul>
        </div>
      </div>
    </div>
  </div>
  <div id="main-content">
    <div class="block-container" id="block-container">
    <div id="tools">
      <form action="#" enctype="multipart/form-data" method="post" id="uploader">
        <input type="file" name="fileUpload" id="fileUpload"  style="display: none" multiple accept=".stl,.obj,.stp,.step">
        <label for="fileUpload">
          <div id="addmore" style="cursor: pointer"></div>
        </label>
      </form>
      <div id="checkout">Checkout</div>
    </div>
  </div>
  </div>
</body>
</html>

使用 jquery 函数,我在 block 容器 div 中添加此代码:

<div id='upload-container-<?php echo $i;?>'  class='upload-container'>
        <div class="form-data">
          <div class="col col1">
            <div class="col-content"><img src="img/square.jpg" /></div>
            <div class="col-info">Nome del file</div>
          </div>
          <div class="col col2">
        <div class="col-content">
          <label class="label">MATERIALI</label>
          <div class="select-style">
            <?php
              echo"<select name='materiali' class='materiali' autofocus tabindex='20' >";
                  foreach($oxmL->Materials->Material as $material)
                  {
                      echo "<option value=$material->MaterialID>$material->Name</option>";
                  }
              echo"</select>";
            ?>
        </div>
        <label class="label">FINITURA</label>
        <div id="selectmateriali2"class="select-style">
          <?php
            $id=$oxmL->Materials->Material['0']->MaterialID;
            echo"<select name='materiali2' class='materiali2' id='materiali2' autofocus tabindex='20'>";
            foreach($oxmL->Materials->Material as $material)
            {
                if($material->MaterialID==$id)
                {
                    foreach($material->Finishes->Finish as $finish)
                    {
                        echo "<option value=$finish->FinishID>$finish->Name</option>";
                    }
                }
            }
            echo"</select>";
          ?>
        </div>
        <label class="label">QUANTITA</label>
          <input name="quantity" id="quantity" type="number" class="quantita" min="1" step="1" value="1">
            </div>
            <div class="col-info"></div>
          </div>
          <div class="col col3">
            <div class="col-content">
              <div class="size-form">
                <div class="label">Resize</div>
                <input class="size" type="text" value="100"/>
              </div>
              <div class="size-text">Change the size of your object in percent</div>
              <div class="size-info">
                <div class ="box-title">
                <div class="title-icon"><img src="img/3dpr-form-xyz-cube.png" /></div>
              </div>
                <div class="axis-area">
                <div class="axis axis-x">X: <label for="x" class="labelx">2</label></div>
                <div class="axis axis-y">Y: <label for="y" class="labely">3</label></div>
                <div class="axis axis-z">Z: <label for="z" class="labelz">4</label></div>
              </div>
              </div>
            </div>
            <div class="col-info">
        <div class="icons">
            <div class="button button-duplicate"></div>
            <div class="button button-delete"></div>
        </div>
              <div class="price">450.20 €</div>
            </div>
          </div>
        </div>
        <div class="item-info">
          <div class="filename col col1"> <label for="filename">filename.ciops</label></div>
          <div class="icons col col2">
        <div class="button button-zoom"></div>
        <div class="button button-duplicate"></div>
        <div class="button button-delete"></div>
      </div>
          <div class="price col col3"> <label for="price" class="labelprice">450.20</label> €</div>
        </div>
    </div>

我想要一个带有“button button-duplicate”类的 div 的点击监听器,我这样做了:

$('#block-container').on('input','.quantita',quantityChanged);

    $('#block-container').on('input','.size',scaleChanged);

    $('#block-container').on('click','.button button-delete', function(){
        alert("ok");
        //some code
    });

    $('input[type=file]').on('change', prepareUpload);

    $('form').on('submit', uploadFiles);

但它不起作用,而是页面中的每个其他监听器都使用 #block-container 作为静态元素。我能做些什么?有什么建议吗?谢谢您

最佳答案

您的代码的问题在于您的选择器。

你有:

$('#block-container').on('click','.button button-delete', function(){
        alert("ok");
        //some code
    });

它应该是:

$('#block-container').on('click','.button.button-delete', function(){
        alert("ok");
        //some code
    });

当你想通过两个或多个类选择一个元素时,你必须将类选择器全部写在一起,它们之间不能有空格,这样 '.class1.class2.class3'

关于javascript - jQuery 事件委托(delegate)不适用于点击 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47487851/

相关文章:

javascript - 相对定位粘附(固定)元素

javascript - 如何在不刷新页面的情况下更改 URI?

javascript - Google Maps API (v3) 添加/更新标记

javascript - 在纯数字输入字段中限制零

html - 揭开 Logo - 被另一个 DIV 的背景图像阻止

javascript - asp.net 控件位置不正确

jquery - 如何清除 Wordpress 缓存?

php - 缓存的 Ajax 调用

jquery - 为什么刷新页面后一些 jQuery 脚本不工作

php - 发生事情时如何使用php脚本,ajax?