简体   繁体   English

jQuery对话框中的jQuery元素在ajax调用后停止工作

[英]jQuery elements inside a jQuery dialog stop working after ajax call

<div id="divItems"><div id="divItemsContent"></div></div>

I think i know what the problem is, just don't know how to solve it. 我想我知道问题是什么,只是不知道如何解决它。 Here is the code: 这是代码:

function SplitOrder() {
    var SplitTable = $.ajax({
        url: 'AjaxActions/SplitTable.aspx?FromObjectID=' + $('#hidObjectID').val() + '&ToObjectID=' + ObjectID[1],
        async: false
    }).responseText;

    var dialog = $('#divItems').dialog({
        autoOpen: false,
        height: 500,
        width: 600,
        title: 'פיצול שולחן'
    });

    var content = $("#divItemsContent");
    content.html("");
    content.html(SplitTable);
    dialog.dialog("open");
    //הפעולות על החשבונות
    /************************************************/

    $('#imgLeftArrow').click(

    function() {

        $(this).css("background-color", "white");


        //AJAX הבאת נתוני רשומת ההזמנה מהשרת ב
        var SplitTable = $.ajax({
            url: 'AjaxActions/SplitUpdate.aspx?FromObjectID=' + $('#hidObjectID').val() + '&ToObjectID=' + ObjectID[1] + '&ItemID=' + $('#hidItemID').val() + '&ItemAmount=' + $('#hidItemAmount').val(),
            async: false
        }).responseText;

        content.html("");
        content.html(SplitTable);
    });


    $('#imgRightArrow').click(

    function() {
        //AJAX הבאת נתוני רשומת ההזמנה מהשרת ב
        var SplitUpdate = $.ajax({
            url: 'AjaxActions/SplitUpdate.aspx?FromObjectID=' + $('#hidObjectID').val() + '&ToObjectID=' + ObjectID[1] + '&ItemID=' + $('#hidItemID').val() + '&ItemAmount=' + $('#hidItemAmountTo').val(),
            async: false
        }).responseText;
    });

    /************************************************/

    $('div[id^="Item_"]').hover(

    function(e) {
        $(this).css("cursor", "pointer");
        $(this).css("background-color", "blue");
    },

    //כשיוצאים מהשולחן DIVהעלמת ה


    function() {
        $(this).css("background-color", "white");
    });

    /************************************************/

    //טיפול בבחירת פריט להוספה/הורדה מהחשבון
    $('div[id^="Item_"]').click(

    function() {
        $('#imgLeftArrow').css("background-color", "yellow");

        //הוספת הפריט לשדה הנסתר
        $('#hidItemID').val($(this).children().html());
        $('#hidItemName').val($(this).children().next().html());
        $('#hidItemAmount').val($(this).children().next().next().html());

    });
}​

I am trying to display one page using the ajax call and put the result in the dialog...This is working great!!! 我试图使用ajax调用显示一个页面并将结果放在对话框中......这很有效!

Next, if someone choses an item and press the left arrow pic, I am doing another ajax call that updates the database and returns the new HTML (using XML/SXL) and I am getting the right result from that also. 接下来,如果某人选择了一个项目并按下左箭头图片,我正在进行另一个更新数据库并返回新HTML(使用XML / SXL)的ajax调用,我也从中获得了正确的结果。

I am getting the first hover and click working great, but after I'm updating the data and getting the result the hover stops working and also the click event on the arrow. 我正在获得第一个悬停并单击工作很好,但在我更新数据并获得结果后,悬停停止工作以及箭头上的单击事件。 I think it is because i'm rendering the data inside the click event function but I don't know how to solve it. 我认为这是因为我在click事件函数中呈现数据,但我不知道如何解决它。

If you are returning HTML and you expect to have click events and hover events happen on elements within the new returned html then you need to use the .live() jQuery keyword. 如果要返回HTML并且您希望在新返回的html中的元素上发生单击事件和悬停事件,则需要使用.live() jQuery关键字。

Update: As of jQuery 1.7, the .live() method is deprecated (and no longer exists starting in 1.9!). 更新:从jQuery 1.7开始,不推荐使用.live()方法(从1.9开始不再存在!)。 Use .on() to attach event handlers. 使用.on()附加事件处理程序。 Users of older versions of jQuery should use .delegate() in preference to .live() . 旧版jQuery的用户应该使用.delegate()而不是.live()

I think I understand what you're trying to do... 我想我明白你要做什么......

If any of the HTML is in these statements: 如果这些语句中包含任何HTML:

$('#hidItemID').val($(this).children().html());
$('#hidItemName').val($(this).children().next().html());
$('#hidItemAmount').val($(this).children().next().next().html());

Contains jQuery, it will be rendered as plain HTML because they are being added to the DOM after event binding. 包含jQuery,它将呈现为纯HTML,因为它们在事件绑定后被添加到DOM中。 What Griegs suggested willwork. 格里格斯建议做什么。

You'll need something similar to: 你需要类似的东西:

$('div[id^="Item_"]').live('hover', function(event) {
    // do something on hover
});

$('#imgLeftArrow').live('click', function(event) {
    // do something on click
});

$('#imgRightArrow').live('click', function(event) {
    // do something on click
});

This way new elements will also trigger the handlers. 这样,新元素也将触发处理程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM