我正在抓取一个数据属性,点击我要发布的id,如果我是console.log()我的id IO可以看到它,但是我有一个表单的提交函数,这里的数据是未定义的......不确定原因,这是我的代码:
$('[data-id="add_child_notification"]').unbind().bind('click', function(){
var data = [];
var message;
var parent_id;
var user_id;
parent_id = $(this).attr('data-parent-id');
user_id = $(this).attr('data-user-id');
data.push({ name: 'parent_id', value : parent_id, nameUid: 'user_id', valueUid : user_id });
console.log('before: '+parent_id);
$('[data-form="send_child_notification"]').unbind().bind('submit', function(){
console.log('after: '+data[1].parent_id);
message = $('[data-input="child-message-textarea"]:last').val();
console.log('msg: '+message);
data.push({ nameMsg: 'message', valueMsg: message });
$.post(URL+'notifications/send_child_notification', data, function(e){
if(e.status){
$('body').append('<div class="success_box"><span class="glyphicon glyphicon-thumbs-up"></span><p>Notification sent</p></div>');
$('.success_box').delay(1000).fadeOut();
window.location = window.location.href;
} else {
alert(e);
//alert('Uh oh! Something went wrong, please try again..');
}
});
});
});
答案 0 :(得分:0)
data
是一个包含对象的数组。
data == [ {name: 'parent_id', value : parent_id, name: 'user_id', value : user_id } ]
因此,您必须使用data[0].value
,其值为parent_id
。
编辑1:
正如詹姆斯所注意到的,&#34;价值&#34;密钥定义了两次,因此最后一次定义会覆盖前一个密钥,并且您将获得user_id
。
就此而言,&#34; name&#34;也被定义了两次。
换句话说,您的设计存在缺陷,无法触及parent_id
。用以下内容纠正双键定义:
data.push({ name: 'parent_id', value : parent_id, uidName : 'user_id', uidValue : user_id })
编辑2:
实际上,你正在建造一系列物品,但我觉得它非常笨拙而且你真的不知道你要去哪里。你正在构建这样的东西:
data == [ { name: 'parent_id', value : parent_id, nameUid: 'user_id', valueUid : user_id },
{ nameMsg: 'message', valueMsg: message } ]
......这是方便和标准的。 我想你想要这个数据对象:
data == {
'parent_id' : parent_id,
'user_id' : user_id,
'message' : message }
因此,您只需使用data.parent_id
或data.message
如果是这样,请执行以下操作:
$('[data-id="add_child_notification"]').unbind().click( function(){
var data = {
'parent_id' : $(this).data('parent-id'),
'user_id' : $(this).data('user-id')
}
$('[data-form="send_child_notification"]').unbind().submit( function(){
data.message = $('[data-input="child-message-textarea"]:last').val();
$.post(URL+'notifications/send_child_notification', data, function(e){
....
此外,像$('[data-input="child-message-textarea"]:last')
这样的选择器看起来也很笨拙,但由于你没有发布任何HTML代码,因此很难猜出正确的代码并且更正。
答案 1 :(得分:0)
我原来与范围无关而是它是什么我使用jQuery声明一个对象而你无法推送到一个对象。相反,您需要将var分配给对象,如下所示:
data.user_id = user_id;
data.message = message;
这样做后,我的vars被正确定义,一切正常!
感谢您的帮助!