表单提交后jQuery变量范围未定义

时间:2015-03-26 12:45:16

标签: jquery

我正在抓取一个数据属性,点击我要发布的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..');
            }

        });

    });

});

2 个答案:

答案 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_iddata.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被正确定义,一切正常!

感谢您的帮助!