如何将JQuery添加到从ajax调用加载的html中?

Kar*_*hik 1 html javascript ajax jquery jsp

我在这样的jsp中有一个div:

<div id="response" class="response"></div>
Run Code Online (Sandbox Code Playgroud)

在对servlet进行ajax调用之后,此div附加为:

<div id="response" class="response">
<h3>Connected as user : Tony</h3>
<p>You selected the procedure : <B>lg_resultsretrieval</B></p>
<div class="showbiz">
<label>Enter procedure input variables : </label></div> 
<div class="actual-input">
<label>Parameter1: </label><textarea name='text1' id='text1' class='txtarea' rows='1' cols='50'>starttime - timestamp without time zone</textarea><br> 
<label>Parameter2: </label><textarea name='text2' id='text2' class='txtarea' rows='1' cols='50'>endtime - timestamp without time zone</textarea><br> 
<label>Parameter3: </label><textarea name='text3' id='text3' class='txtarea' rows='1' cols='50'>in_sourceindicator - integer</textarea><br> 
<label>Parameter4: </label><textarea name='text4' id='text4' class='txtarea' rows='1' cols='50'>keyword - character varying</textarea><br> 
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我为textarea编写了一个jquery函数,如下所示:

//submits only when the textbox value is valid
    $("#response").on("change", function() { 
              $("#Execute").click(function () {
                    if ($(".txtarea").val() == this.defaultValue)
                    {
                        alert("Please insert a valid value");
                        return false;
                    }
                });

              $("txtarea")
              .focus(function() {
                    if (this.value === this.defaultValue) {
                        console.log('inside focus function');
                        this.value = '';
                    }
              })
              .blur(function() {
                    if (this.value === '') {
                        this.value = this.defaultValue;
                    }
            });       
            });
Run Code Online (Sandbox Code Playgroud)

问题是,上面的代码不起作用,虽然在jquery文档中它表示在动态加载元素的函数上使用.我如何使其工作?请建议

Dav*_*vid 5

如果div在DOM中替换它本身,那么附加到它的任何处理程序确实div会丢失.请注意如何在此处附加处理程序:

$("#response").on("change", function() {
  // code
});
Run Code Online (Sandbox Code Playgroud)

div会将处理程序直接附加到$("#response")评估选择器时的状态.处理程序附加到元素,而不是动态选择器.为了保留添加/替换的元素的处理程序,您需要绑定到父元素并过滤目标元素.像这样的东西:

$(document).on("change", "#response", function() {
  // code
});
Run Code Online (Sandbox Code Playgroud)

这会将处理程序绑定到document对象,该对象不会更改,因此处理程序不会在子元素更改时丢失.(作为参考,我实际上昨天刚刚在博客上发表过这篇文章.)