函数处理程序不适用于动态创建的元素(不是事件!)

时间:2017-09-08 23:30:25

标签: javascript jquery

在你作为重复投票之前,请听我说!

我有一个应用程序,它在访问数据库后从PHP代码生成一个表。

HTML非常简单:

<h2>Find food by name</h2>




<form method="post">
<label for="food">Food</label>
<input type="text" id="food" name="food">
<input id="submitBtn" type="submit" name="submit" value="View Results">
</form>

<a href="index.php">Back to home</a>

<?php require "templates/footer.php"; ?>

body元素开始标记位于header.php文件中。

这是JS,我们可以跳过PHP和SQL代码,这些工作正常。

$(function(){
if(jQuery){
alert("i am here"); // check if jQuery is loaded, it is.
}

if($('table').length == 0) {
alert("table is not generated yet"); // check if table is there, works as planned
}
else {
var reso = $('table').id="mainTable"; //assigning ID to the generated table
alert("table id is "+ reso); // testing ID assigment, this works
$(document.body).on('click', '#mainTable', function(e) {
e.preventDefault();
$('#mainTable').fadeOut(200).fadeIn(2000);
});

}
});

我正在使用&#34; on#34;,正确的jQuery版本,但这不起作用,控制台中没有错误消息。我尝试过#submitBtn而不是$ document.body,我尝试过使用和不使用preventDefault()。

我想要的只是在生成表格后暂时隐藏表格然后淡入其中。截至目前,它只是生成并显示,没有动画。

我显然是在localhost上运行它,没有代码链接。

编辑,找到解决方案,它确实是CSS opacity设置为任何东西,但默认导致这个。即使是香草ID分配也没问题。 但是,这里有一个问题,Fade方法工作正常,但幻灯片,隐藏,显示方法无法按预期工作。动画只能在很短的时间内看到。

编辑,测试可用的jQuery方法后...... FadeToggle和链接像

 fadeOut(100).delay(200).fadeIn(300) 

真的很糟糕。 唯一可接受的方法是在fadeOut之后运行回调,如下所示:

if($('table').length > 0) { $('#mainTable').fadeOut(100, function() {
$('#mainTable').fadeIn(2000);
});} 

所有其他方法都太生涩,我甚至不敢使用animate()。 将CSS设置为none的上述内容非常流畅。

0 个答案:

没有答案