javascript - $(document.body).on ('change' , '.someclass' , function () {});不起作用

标签 javascript jquery

在我的应用程序中,当文件加载到 html 文件输入标记时,我需要触发一个 JQuery 函数。

下面给出的文件输入代码是引用文章http://www.jasny.net/bootstrap/javascript/#fileinput实现的.

<div class="fileinput fileinput-new" data-provides="fileinput">
    <div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
    <div>
        <span class="btn btn-default btn-file">
            <span class="fileinput-new">Select image</span>
            <span class="fileinput-exists">Change</span>
            <input type="file"  class="tenderImage">
        </span>
        <a href="#" class="btn btn-default fileinput-exists" data-dismiss="fileinput">Remove</a>
    </div>
</div>

我需要一个在文件加载到输入元素时执行的函数。为此,我编写了以下代码。

$(document).ready(function(){
    $(document.body).on('change','.tenderImage', function(){
         alert("fired");
     });
});

但是,上面的函数没有被执行。但是如果我用下面的方式写同样的东西,它就会被执行。

$(document).ready(function(){
    $('.tenderImage').change(function(){
          alert("fired");
    });
});

前一个不工作的原因可能是什么?由于以下问题中讨论的原因,我需要以这种方式实现该功能。

Jquery event handler not working on dynamic content

编辑

根据评论中得到的信息修改了代码。该信息是不要使用原始的 Jquery 函数,而是使用我正在使用的库提供的函数。

还是不行。这是 JSFidle。 https://jsfiddle.net/Viraj_Gamage/2e4eochj/1/

最佳答案

使用events from the plugin您正在使用(如评论中所述)

$(document.body).on("change.bs.fileinput", function() {
  alert("changed");
});

如果您需要委托(delegate)事件,请使用 div.fileinput (或更准确地说:div.fileinput.fileinput-exists)作为选择器

$(document.body).on("change.bs.fileinput", "div.fileinput.fileinput-exists", function() {
  alert("changed");
});

示例:

$(document.body).on("change.bs.fileinput", "div.fileinput.fileinput-exists", function(e) {
  alert("changed");
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/css/jasny-bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/js/jasny-bootstrap.min.js"></script>
<div class="fileinput fileinput-new" data-provides="fileinput">
    <div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
    <div>
        <span class="btn btn-default btn-file">
            <span class="fileinput-new">Select image</span>
            <span class="fileinput-exists">Change</span>
            <input type="file"  class="tenderImage">
        </span>
        <a href="#" class="btn btn-default fileinput-exists" data-dismiss="fileinput">Remove</a>
    </div>
</div>

或者如 fiddle

关于javascript - $(document.body).on ('change' , '.someclass' , function () {});不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43558861/

相关文章:

javascript - 如何缩放多线 Google 图表以使最大值位于同一高度?

javascript - 如何(完全)复制文件但更改文件名?

javascript - 为什么多功能代码行不会产生错误而只是停止执行?

php - Ajax 请求 mysql

javascript - 图像叠加网格

javascript - 如何在JS中测试工厂方法?

javascript - 通过 jquery 设置最小高度

jquery - Ajax.get() 与 $(div).load 与 html.renderaction MVC 4

javascript - 输入字段的样式字体(Angularjs)

javascript - AJAX 追加问题