使用jquery在div中没有​​更新的新值

时间:2012-12-19 07:04:03

标签: jquery

我从弹出的位置选择了值。当我选择控件通过ajax调用进入服务器的值时,在回调方法中我生成了HTML页面。

我已经尝试将div这样的值设置为div。

$("#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName").replaceWith($('#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName', msg).html());

当我使用上面的行时,第一次将值设置为div但在此之后,每当我选择一个新值并且发生ajax调用时,该值都没有设置并且无论我第一次设置的是什么。

更新:

我用来设置值的ajax方法:

function getCustomerDetails(customerName,viewName) {
    var global = window.document

        $.ajax({
             type: "POST",
            url: viewName,
            data: {
                id: customerName
            },
            success: function (msg) {


                global.getElementById("CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName").innerHTML = $('#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName', msg).html();

                alert($('#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName', msg).html());
                alert($('#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_PackingMethod', msg).html());

                $("#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName").replaceWith($('#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_CustomerName', msg).html());
                $("#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_PackingMethod").replaceWith($('#CIMtrek_dvDialogListCtrlPlaceholder_CIMtrek_DailyshipCo_PackingMethod', msg).html());

            }
        });

}

如何将新值更新为div?

1 个答案:

答案 0 :(得分:2)

从您的AJAX第一次运行但不在.replaceWith()之后的情况判断,这可能是因为当您用一段HTML片段替换节点时,所有事件处理程序都被删除了。

您应该在节点上使用.on().delegate()注册您的事件处理程序,这些节点在您应用的整个生命周期内都不会被删除。

我们假设你有这个结构:

<div id="mybase">
   <div class="mysel">
       <select name="test"><option /> ... </select>
   </div>
</div>

并假设您注册了这样的事件处理程序:

$('#mybase input[name="test"]').change(function() {
    // replace $('#mybase .mysel') with something that has the same dropdown
});

现在您的事件处理程序将消失,下拉列表中的任何更改都不会触发您的事件处理程序。

相反,你可以这样做:

$('#mybase').on('change', 'input[name="test"]', function() {
    // replace $('#mybase .mysel') with something that has the same dropdown
});

希望有所帮助。