Jquery .Post返回我可以使用的元素

时间:2014-03-27 19:52:04

标签: jquery html

对某些人来说这可能很简单,但我在这里遇到了一些重大问题。

$.post("ajax.php?returntable=1", { }, function(data)
{
    $("#output<?=$tabindex?>").html(data);
    buttoncontrol(joborder, opno, employee, "StartProduction");
}, "html");

这将PHP页面中的HTML数据输出到DIV并且工作正常。

数据包含多个具有特定类的输入框 - 属性与它一起返回数据。

echo "<input style='text-align:right; width:90px;' type='number' class='laborlinechange' foperno='".trim($rs->fields['foperno'])."' joborder = '".trim($rs->fields['fjobno'])."' datetimed = '".$rs->fields['datetime']."' changetype = 'startcount' value='".$rs->fields['fstartcount']."'>";

我的问题是,当我去访问课程而没有刷新它不会让我。

$(".laborlinechange").blur(function (e) 
{
     alert("ANYTHING");
})

我不知道我是否需要.addClass或我需要做什么。 我认为某个地方我需要告诉要创建的元素,但是,不知道在哪里或如何:(
提前谢谢!

4 个答案:

答案 0 :(得分:2)

在动态元素上,您需要使用事件委派:

$(document).on('blur', ".laborlinechange", function (e) 
{
    alert("ANYTHING");
});

另一种解决方案是在创建事件后绑定事件。性能方面,这个解决方案更好,但控制它更难,可能会复制代码:

$("#output<?=$tabindex?>").html(data)
.find('.laborlinechange').on('blur', function(){
    alert('yeah');
});
buttoncontrol(joborder, opno, employee, "StartProduction");

您可以在此处找到更多信息:https://api.jquery.com/on/#direct-and-delegated-events

在Google上搜索委托动态元素 ajax / event 的组合将向您显示有关主题:event + dynamic + element

答案 1 :(得分:1)

如果要动态地向DOM添加元素,则在使用时,它们不会附加由jQuery添加的事件侦听器:

$(function () {
  $(".laborlinechange").blur(function (e) 
  {
       alert("ANYTHING");
  });
}

您的blur代码仅适用于运行jQuery代码时存在的元素(即文档准备就绪时(从技术上讲,文档准备就绪后,$(function() {})不会运行)但你明白了))。

最简单的方法是在更新DOM后应用事件监听器:

$.post("ajax.php?returntable=1", { }, function(data)
{
    $("#output<?=$tabindex?>").html(data);
    $("#output<?=$tabindex?> .laborlinechange").blur(function (e) 
    {
         alert("ANYTHING");
    });
    //...

另一个解决方案是根据@ Karl-André_Gagnon的答案使用事件委托。

答案 2 :(得分:0)

在JQuery中,默认绑定(如.click, .change, .blur等)仅绑定到初始DOM内容。由于您正在使用新内容,因此JQuery绑定不会看到新内容。请尝试以下方法。

$(document).on("blur", ".laborlinechange", function({ //code });

答案 3 :(得分:0)

您的事件处理程序将被绑定以侦听blur事件,但仅限于最初加载时页面上存在的元素。与jQuery的事件处理程序存在一些不一致,以及它们是通过AJAX加载还是仅通过原始页面加载进行监听,但您可以使用ondelegate绑定来确保它们在AJAX调用完成后进行监听:

$(document).on('blur', '.laborlinechange', function(e) {
    alert("ANYTHING");
});

文档: https://api.jquery.com/on/