【问题标题】:onclick the specific div's id will be clicked replace the title the of the div with the title of the uploaded fileonclick 将点击特定 div 的 id 将 div 的标题替换为上传文件的标题
【发布时间】:2025-12-11 08:00:02
【问题描述】:

我有 3 个类名为“上传”的 div。每个上传类都用于输入文件。我必须隐藏输入文件按钮并使用我的自定义按钮。但是现在 onclick 浏览 6 个文件上传。如何仅为单击的 div 获取文件上传选项????以及如何将点击的 div 的标题更改为我选择上传的文件的标题。

        <div class="col-md-4 atm">
        <div class="photo" style="background: none">
            <?php echo $this->Html->image('/students_tmp_design/images/file-upload.png', array('alt' => '', 'id' => 'photoStyle'));?>
        </div><!--End of photo-->
        <div class="upload" id="yourBtn">UPLOAD FORWARDING LETTER</div>
                <div class="hiddenBtn">
                    <?php echo $this->Form->file('letter', array('id' => 'upfile', 'onchange'=>'sub(this)')); ?>
                </div>
        </div>
        <div class="col-md-4 atm">
        <div class="photo" style="background: none">
            <?php echo $this->Html->image('/students_tmp_design/images/file-upload.png', array('alt' => '', 'id' => 'photoStyle',));?>
        </div><!--End of photo-->
        <div class="upload" id="yourBtn">UPLOAD NEWSPAPER CIRCULAR</div>
                <div class="hiddenBtn">
                    <?php echo $this->Form->file('news', array('id' => 'upfile', 'onchange'=>'sub(this)')); ?>
                </div>
        </div>
        <div class="col-md-4 atm">
        <div class="photo" style="background: none">
            <?php echo $this->Html->image('/students_tmp_design/images/file-upload.png', array('alt' => '', 'id' => 'photoStyle'));?>
        </div><!--End of photo-->
        <div class="upload" id="yourBtn">UPLOAD SMC APPROVAL LETTER</div>
                <div class="hiddenBtn">
                    <?php echo $this->Form->file('smc_letter', array('id' => 'upfile', 'onchange'=>'sub(this)')); ?>
                </div>
        </div>
    </div>

$('.upload').on('click',function(){
    $('#upfile').click();
    });
function sub(obj){
    var file = obj.value;
    var fileName = file.split("\\");
    document.getElementById("yourBtn").innerHTML = fileName[fileName.length-1];
    document.myForm.submit();
    event.preventDefault();
    }

【问题讨论】:

  • 为每个 div 使用特定的 id....
  • Rishab 的回答会起作用,但您确实应该避免在同一页面上的多个元素上使用相同的 ID。在这种情况下,甚至没有理由使用相同的 ID - 只需给每个上传 div 一个单独的 ID,以及每个“upfile”元素。
  • 抱歉没有解决...点击所有 3 个上传
  • 我已经编辑了我的答案。让我知道它是否有效

标签: javascript jquery


【解决方案1】:

如果可能,请为每个 div 设置一个 id。然后在您的事件监听器中,您可以参考event.target 来检查点击了哪个div 元素。

例如:

    $('.upload').on('click', function (event) {
      var divID = event.target.id;
      // some logic with ifs or a switch
      // ...
      $('#upfile').click();
    });

编辑: 好的,我会给出更全面的答案。我在 PHP 方面不是特别强,但这就是我的设置方式:

PHP 代码定义 DOM 元素

    <?php
      $uploadDIVs = [
        "letter" => "FORWARDING LETTER",
        "news" => "NEWSPAPER CIRCULAR",
        "sms_letter" => "SMC APPROVAL LETTER"
      ];

      foreach($uploadDIVs as $key=>$value): ?>
        <div class="col-md-4 atm">
          <div class="photo" style="background: none">
            <?php echo $this->Html->image('/students_tmp_design/images/file-upload.png', array('alt' => '', 'id' => 'photoStyle'));?>
          </div><!--End of photo-->

          <div class="upload" id=""button-".$key>UPLOAD <?php echo $value ?></div>
            <div class="hiddenBtn">
              <?php echo $this->Form->file($key, array('id' => "upfile-".$key, 'onchange'=>'sub(this)')); ?>
            </div>
          </div>
        </div>

      <?php endforeach; ?>

控制按钮动作的 JS (jquery?) 代码

    $('.upload').on('click',function(event){
      // get the clicked DIV's id
      var divClickedID = event.target.id;
      // execute the 'click()' function on the proper button
      $('#upfile-' + extractID(divClickedID)).click();
    });

    function sub(obj){
      var file = obj.value;
      var fileName = file.split("\\");
      document.getElementById("button-" + extractID(obj.id)).innerHTML = fileName[fileName.length-1];
      document.myForm.submit();
      event.preventDefault();
    }

    function extractID (elementID) {
      return elementID.substr(elementID.indexOf("-" + 1);
    }

【讨论】:

  • 但是现在上传后我需要更改上传按钮的标题并给它上传文件的名称。我该怎么做??
  • 这是一个单独的问题。如果您需要更改button 元素的文本,您可以使用innerHTML,即:button.innerHTML = “new text”
  • 对不起这个功能不起作用...点击它正在上传所有的div。
  • 您应该为按钮使用唯一的id,该按钮以某种方式绑定到 div 的id,即:upfile-div1。这样,当点击div 时,您可以使用event.target.id 来点击特定按钮。
  • 以这种方式,我必须分别为 3 个 div 编写该 jqurey 代码 3 次......这将非常困难......因为我有大约 10 个 div 的 uplaods..
【解决方案2】:

您好问题的解决方案: 这只会触发特定的 div #upfile 元素

$('.upload').on('click',function(){
  $(this).find('#upfile').click();// 
});

【讨论】: