我们正在创建一个管理控制台,客户端将自行更新他的网站。
为此,我们使用js和PHP(ajax)创建div:
$(document).ready(function($)
{
function loadContent(page)
{
$.ajax(
{
url: 'contenu/contenu.php',
type: 'POST',
dataType: 'html',
data:
{
'onglet': page
},
success:function(contenu)
{
console.log("success");
$("div."+page).html(contenu);
}
})
};
});
PHP代码(只是其中的一部分):
$reponse = $db->query('SELECT * FROM philosophie');
$data = $reponse->fetch();
//maj de la version FR de philosophie
echo '<form action="#" method="POST">
<label>Texte en français :</label><br/>
<textarea name="texte_fr">'.$data["texte_fr"].'</textarea><br/>
<br />
<input type="button" id="maj_philosophie_fr" value="Mettre à jour ce texte" />
<br /><br />';
该表单出现在网站上,效果很好。
之后,我想知道有多少个按钮,其id以&#34开头; maj _&#34;使用此代码在网站内:
alert($("[id^='maj_']").length);
我仍然有0回复。
该元素尚未就绪,我无法在我的div上获得更改事件。
我看到了firebug中的元素(DOM部分),它们是红色字符。
请问您有什么想法吗?
答案 0 :(得分:1)
在调用成功函数之前,您的警报似乎正在运行。尝试在那里移动警报,更好的是,使用setTimeout将其抛入下一个事件周期。
$(document).ready(function () {
function loadContent (page) {
$.ajax({
url: 'contenu/contenu.php',
type: 'POST',
dataType: 'html',
data: { 'onglet': page },
success: function (contenu) {
console.log("success")
$("div."+page).html(contenu)
setTimeout(function () {
alert($("[id^='maj_']").length)
}, 100)
// might even work with 0, if the dom render function
// is the very next thing in the queue
}
})
}
})
如果你必须使用许多嵌套的ajax调用,你可能想要研究使用promise api。 Here are the docs for the jQuery implementation of $.promise()
确保在调用成功函数后运行代码不是可以解决的问题。代码在接收数据之前无法了解数据,这意味着要么嵌套成功回调,要么使用其他解决方案,例如链接命名函数回调,或者最好是promises。