e.nodeName是未定义的Jquery

时间:2012-01-10 00:16:06

标签: jquery ajax post

我绞尽脑汁经历它,查看示例并且不明白为什么firebug投掷“e.nodeName未定义”错误。

这可能是一个愚蠢的小支架不合适或需要第二双眼睛看到的东西...

我只是为一些输入做了一个简单的小ajax帖子,但这是我的第一篇文章,由于到目前为止遇到了多少错误,我差点把头发拉下来。 br /> http://jsfiddle.net/JohnnyDoe/aQYra/
我的剧本

<script type="text/javascript">
    $(document).ready(function () {
        $('.hexen').after('<div class="ui-state-default ui-corner-all ui-icon-disk ui-icon saveButton" onClick="save();" title="Save" style="float:left; height:20px;" onclick="save()"></div><br />') // ui icon
    .keypress(function () {
        $(this).next('.saveButton').show(); //appends ui icon
    });

        $('.saveButton').hide().click(function () {
            $(this).hide(); // removes ui icon on click
        });

        $('.ui-state-default').hover(

    function () {
        $(this).addClass('ui-state-hover');
    }, function () {
        $(this).removeClass('ui-state-hover');
    } //ui icon hover
    );
    });

    function save(value) {
        $('.hexen').each(function () {
            var id = null;
        });
        if ($(this).val() !== '') {
            id = $(this).attr('id');
        }
    }
    $.ajax({
        type: "POST",
        url: "Default.aspx",
        data: "{Id: " + $(".hexen").attr('id') + ", Value: " + $(".hexen").val() + "}",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            console.log(data);
        }
    });
</script> 




我的HTML

<div id="unvolitive">
<input type="text" class="hexen" id="Text1"/>
<input type="text" class="hexen" id="Text2"/>
<input type="text" class="hexen" id="Text3"/>
<input type="text" class="hexen" id="Text4"/>
<input type="text" class="hexen" id="Text5"/>
</div> 







提前致谢

4 个答案:

答案 0 :(得分:9)

我认为,从简短的小提琴测试中,问题来自于混合普通的jQuery事件处理程序和您在标记字符串中定义的onclick处理程序(您的save函数)。

我不确定你在save中想要做什么; each电话无效:

$('.hexen').each(function () {
    var id = null; // all this does is set a local variable
});

但更重要的是,您使用onclickthis进行设置的方式将是未定义的,因此以下行不起作用:

if ($(this).val() !== '') {

在此上下文中,this引用window对象,因此我认为这就是您收到错误的原因。要修复它,您应该在jQuery分配的单击处理程序中处理save函数:

$('.saveButton').hide()
    .click(function () {
        $(this).hide(); // removes ui icon on click
        var id;
        // get the associated input
        var $input = $(this).prev('.hexen');
        if ($input.val() !== '') {
            id = $input.attr('id');
        }
        console.log(id);
        // presumably, do something with id now...
});

查看working fiddle

答案 1 :(得分:7)

save()中的错误发生在上下文之外使用this ..(它指的是当前的窗口

应该是

function save(value) {
    $('.hexen').each(function() {
        var id = null;
        if ($(this).val() !== '') {
            id = $(this).attr('id');
        }
    });
}

移动 if处理程序中的each部分..

答案 2 :(得分:1)

您在ajax调用dataType: json中定义,因此您的ajax调用期望从您的服务器返回有效的json。看来你没有返回有效的json。我建议删除此行(contentType)。如果不是这样,那么我不知道是什么。 :)

顺便说一句,您可以像这样定义数据:

data: {
  Id: $(".hexen").attr('id'),
  Value: $(".hexen").val()
}

无需自行进行字符串化。

答案 3 :(得分:1)

如果没有工作链接就很难分辨它在哪里陷入困境,但我可以告诉你,你发布的JSON是无效的。

"{Id: " + $(".hexen").attr('id') + ", Value: " + $(".hexen").val() + "}"

应该是

"{'Id': '" + $(".hexen").attr('id') + "', 'Value': '" + $(".hexen").val() + "'}"