我正在学习jquery,我正在编写一些非常简单的jquery代码,将一些变量发布到我的控制器中的方法。当使用下面发布的代码时,我在firebug中得到"myform未定义"错误。
这是我的html:
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="assets/js/jquery-1.7.1.js"></script>
<script type="text/javascript">
function get(){
$.post('jqtest/test',{name: myform.myname.value},
function (output){
$('#username').html(output).show();
}
);
}
</script>
</head>
<body>
<div>TODO write content</div>
<form name="myform">
<input type="text" name="myname">
<input type="button" value="Get" onclick="get();">
</form>
<div id="username"></div>
</body>
这是我的codeigniter控制器代码:
class Jqtest extends CI_Controller {
function _Jqtest() {
parent::controller();
}
function index() {
$this->load->view("jqtest/jqtest.html");
}
function test() {
print_r($_POST);
$this->load->view("jqtest/jqtest.html");
}
}
当点击Get按钮时,测试方法应该打印POST值。当我在FireFox中运行代码时,它不起作用(没有打印出任何内容)。当我检查firebug控制台时,我发现了一个"myform is not defined"错误。
我知道我的jQuery get()函数有问题,有人可以帮助我,非常感谢!
"myform is not defined"错误发生,因为你没有在javascript中设置myform。
试试Jquery的serializeArray()
var myform= $('form').serializeArray();
function get(){
$.post('jqtest/test',{name: myform.myname.value},
function (output){
$('#username').html(output).show();
} );
}
function get(){
$.post('jqtest/test',{name: $('form[name="myform"] input[name="myname"]').val()},
function (output){
$('#username').html(output).show();
}
);
}
Replace
myform.myname.value
$('input[name="myname"]').val()
您可以简单地这样做:
document.myform.myname.value
表单应该有一个id <form name="myform" id="myformid">
$.post('jqtest/test',{name: myform.myname.value},
将被替换为以下代码:)
$.post('jqtest/test',{name: $( 'input[name="myname"]' ).val()},
如果你需要发送所有形式的值,那么你应该使用serialize。快。
API DOC: serialize
如果你在不同的表单中使用相同的输入名称。那么你应该这样写:
var $form = $( "#myformid" );
name = $form.find( 'input[name="myname"]' ).val();
和post将是:
$.post('jqtest/test',{name: name},