附加新的html时JQuery数据绑定

时间:2018-03-15 14:51:21

标签: javascript jquery

让我用一个例子来说明这个

<div class="main_div">
    <div class="moday">
    </div>
    <button class="add_main">Add</button>
</div>

我们绑定了类add_main,单击添加按钮时函数体执行如下所示

$.ajax({
  type: "POST",
  url : "url",
  dataType : 'json',
  data : { 
    'param1'      : "param1value"
  },
  beforeSend: function(jqXHR , settings ){},
  success: function(response){
     // the response is json object.
     $(this).closest('.main_div').html('<div class="inner_data_section"></div>');
     // I have to assign the response data (that is json object ) to inner_data_seciton.
$(this).closest('.main_div').find('inner_data_section').data('data1',response);
  },
  complete: function(jqXHR , settings){}
});

问题

AS“inner_data_section”稍后添加到div“main_div”。 this.closest.find无法指向inner_data_section,这就是数据也没有绑定到它的原因。

**我的搜索**

我已经搜索并找到了我们将数据分配为data-data1 =“some value”的解决方案。我这样做也可以在以后访问。

但在我们的例子中,我们必须将json对象(复数值)分配给内部div,data-data1 =“some value”仅适用于简单值。

我认为我在获取jquery选择器指针json响应中新添加的html时遇到了问题。

如何应对这个问题?只提示不完整的解决方案。

3 个答案:

答案 0 :(得分:0)

jQuery ajax回调中{ personal_info: { address: { city: 'Missing field', country: 'Missing field', } } } 的默认上下文是jQXhr对象。
所以试图找到它的DOM祖先会失败 要将其设置为您想要的任何内容,请使用context参数。

修改

还有inner_data_section,它没有类选择器this(RRK)

.

答案 1 :(得分:0)

我没有计划你为什么要在元素数据中加入json objet,但这里有一个例子。它绝对不干净但应该有效

$.ajax({
type: "POST",
url : "url",
dataType : 'json',
context: your_div, //<-- here
data : { 
    'param1': "param1value"
},
beforeSend: function(jqXHR , settings ){},
success: (response) => {
    // the response is json object.
    $(this).closest('.main_div').html('<div class="inner_data_section"></div>');
    // I have to assign the response data (that is json object ) to inner_data_seciton.
    Object.keys(respone).forEach(key => $(this).closest('.main_div').find('.inner_data_section').data(key, response[key]));
},
complete: function(jqXHR , settings){}
});

您只需为回复的每个键创建数据属性

答案 2 :(得分:0)

正如您已经发现的那样,DOM 不是复杂数据的位置。有几种方法可以破解它(例如,Richard Fox的建议,但你最好重新考虑你的方法。考虑某种数据存储:

const STORE = {
  data: null
};

function storeData(data){
  STORE.data = data;
}

$.ajax({
  method: 'POST,
  // ..etc
  success: storeData
});

从这里开始,你可以弄清楚如何在某种渲染方法中使用数据。