2012-01-03 36 views
0

刚刚发现Ajax是什么,我想建立一个简单的Ajax/jQuery的函数,它在点击一个按钮一个文本框并将其发布到服务器的值。该按钮是一个连接到它悬停事件,附加上按键的UI图标..我试图把它在一起,但萤火控制台读取语法错误 ..请帮助..阿贾克斯从文本框的值保存到服务器

$(function() { 
     $('.solo1').after('<span class="ui-state-default ui-corner-all ui-icon-disk ui-icon saveButton" title="Save" style="float:left; height:20px;" onclick="function save (value)"></span><br />')// ui icon 
    .keypress(function() { 
     $(this).next('.saveButton').show();//appends ui icon 
    }); 
}); 


function save(value) { 
    $.ajax({ 
     url: "/*ServerURL*/", 
     type: "POST", 
     data: '{ $("#craven1") : "' + value + '" }', 
     data: "{ 'Id': " + $("#craven1").text() + ", 'content': " + $(".solo1").val() + "}", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      console.log(data); 
     }, 
    }); 
} 
</script> 

<div id="featherbone"> 
<input class="solo1" id="craven1"/> 
<input class="solo1" id="craven2"/> 
<input class="solo1" id="craven3"/> 
<input class="solo1" id="craven4"/> 
<input class="solo1" id="craven5"/> 
</div> 

回答

2

待办事项当你点击UI按钮时你会收到错误信息?在这种情况下,我认为语法问题在于,在所述.solo1元素之后添加HTML,特别是在onclick属性:

$('.solo1').after('<span ... onclick="function save (value)"</span><br/>') 

这应该是:

$('.solo1').after('<span ... onclick="save (value)"</span><br/>') 

因为你想要的功能保存到被调用(不限定的,因此从onclick属性移除关键字function的)。

但看你的代码和阅读你的描述,我想你想靠近按钮的输入元素的值传递到函数?

在这种情况下一个更好的解决办法是先创建UI按钮和单击处理程序添加到每个以后:

// Create button and then add it after each input 
var button = $('<span ... ></span><br/>'); 
$('.solo1').after(button); 

// Now that the buttons are created, find them and give each a click handler 
$('.saveButton').click(function() { 
    // Get value from the input element that this button was added after 
    var value = $(this).prev().val(); 

    // Now call the save method with the value 
    save(value); 
}); 

工作例如:http://jsfiddle.net/h78hw/

+1

这是一个问题,但他也没有传值给他的保存功能。既然他已经使用jQuery,这将会是绑定一个click事件处理程序,以他的跨度一个更好的主意:'$(“#spanId”)点击(函数(){});',或者只得到了价值。 save()'函数中的文本框。也就是说,不要接受'value'作为参数,而是执行'var value = $(“#textboxId”)。val();'。 – Josh 2012-01-03 21:25:33

+0

@Josh:谢谢,我有同样的想法,并写代码,你的评论。 – 2012-01-03 22:29:01

0

就在这里运行的JSLint:http://jsfiddle.net/kp6hV/揭示:

Error: 
Problem at line 14 character 92: Duplicate member 'data'. 
data: "{ 'Id': " + $("#craven1").text() + ", 'content': " + $(".solo1... 

Problem at line 19 character 10: Extra comma. 
}, 

Implied global: $ 1,2,4,10,14, console 18 

也就是说,还有一个额外的逗号你的“成功”功能后,和重复的“数据”的成员,因为我已经合作在上面。

编辑:无差错:

function save(value) { 
    $.ajax({ 
    url: "/*ServerURL*/", 
    type: "POST", 
    //data: '{ $("#craven1") : "' + value + '" }', // Not sure what's going on here 
    data: "{ 'Id': " + $("#craven1").text() + ", 'content': " + $(".solo1").val() + "}", 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     console.log(data); 
    } 
    }); 
}