JQuery POSTing按钮值,返回输入?

时间:2012-02-20 19:44:05

标签: javascript jquery ajax json post

嘿伙计们和gals我有一些重大问题试图让我的应用程序工作。我一直试图破解这个并且错过了发送正确输入值(按钮值)以使球滚动的第一部分,我确信这很简单,但我一直遇到问题它工作。如果有人能够找出帮助我的错误,我会很感激。

这在PHP中非常容易,但由于这是一个独立的离线 app我不能使用PHP =(我需要在JQuery中完成所有的提取和解析 或Javascript ....

我们从一个非常基本的表单开始,其中一些按钮具有唯一值。

<form>

<fieldset>
<legend>Select Orders</legend>

<table id='master'></table>

  </div> <!-- end input1 -->
    <div>
     <button name="select" type="submit" id="btnLoad" value="load">Refresh</button>
     <button name="select" type="submit" id="btnJson" value="down">Download JSON</button>
     <button name="select" type="submit" id="btnView" value="view">View/Enter</button>
    </div>
</fieldset>

</form>

触发此功能

$(function() {
    $("form").submit(function() {

        /* what obj are we recieving?
        $.each($(this), function(index, obj) {
            console.log('Index: ' + index + ' Obj: '+ obj);
            // returns this B/S: Index: 0 Obj: [object HTMLFormElement]
        });
        */

        // $this.button.val() never makes it through?
        queryJsonServer($(this), "class/");
        return false;
    });
});

我尝试过像

这样的事情
var button = $(this).attr("value");
var button = $('button').attr("value"); // ends up with the first buttons value,
                                        // but never the selected or $(this).val()

$('button').click(function() {          // which WILL console.log the buttons val,
  console.log($(this).val());           // but will not let me turn it into a var?
  return false;                         // ALSO this looks like it only reads the
});                                     // value the SECOND click?

这里的任务是将按钮值作为$ _POST类型发送到解析器,解析器将返回要解析的相应JSON数组,或存储在本地SQLite数据库中。< / p>

无论哪种方式,这里是页面的完整代码,有人可以帮我一把,或者如果我需要澄清请告诉我。

<?php 
    ini_set('display_errors', 1);
    error_reporting(E_ERROR | E_PARSE);
    var_export($_POST);
?>

<!DOCTYPE html>
<html lang="en-US">
    <head>
     <title> </title>

     <script src='http://www.google.com/jsapi'></script>
     <script> google.load('jquery', '1.7.1'); </script>

     <script>
        $(function(){
            $("form").submit(function() 
            {

                /* what obj are we recieving?
                $.each($(this), function(index, obj) {
                    console.log('Index: ' + index + ' Obj: '+ obj);
                    // returns this B/S: Index: 0 Obj: [object HTMLFormElement]
                });
                */

                $('button').click(function() {
                    var state = $(this).val();
                    return true;
                });

                // state is undefined. L29
                console.log(state);

                // $this.button.val() never makes it through?
                queryJsonServer($(this), state, "class/");
                return false;
            });

            // query json server for
            function queryJsonServer(form, state, path) 
            {

                // on first return or refresh inputs will be returrned
                var view    = $('input[name="orders"]:checked').val();
                var url     = path + "json.php?" + state; // status = button.val()
                var state   = $(this).attr("value"); // ends up class/json.php?undefined

                // we have data, lets post to json parser and 
                $.getJSON(url, view, function(data) 
                {
                     $('form').unbind('submit').trigger('submit');

                    var items = [];

                        switch(state)
                        {
                            case 'load' : 

                                $.each(data, function(index, obj) { 
                                    items.push('<tr>');
                                    $.each(obj, function(key, val) { 
                                      items.push((key == "report_number") 
                                      ? '<td class="check" ><input type="checkbox" name="' + val + '" /></td><td><label class="caps" for="'+ key +'">'+ key.replace("_", " ") +'</label><input disabled="disabled" type="text" id="' + key + '" value="' + val + '" /></td>' 
                                      : '<td><label class="caps" for="'+ key +'">'+ key.replace("_", " ") +'</label><input disabled="disabled" type="text" id="' + key + '" value="' + val + '" /></td>')
                                    }); 
                                    items.push('</tr>');
                                });

                                $('<div/>', {
                                    'class': 'jsonOutput',
                                    html: items.join('')
                                  }).appendTo('#master');

                              break;

                            case 'down' : 
                              // populate SQLite Database
                              break;

                            case 'view' : 

                                $.each(data, function(index, obj) { 
                                    items.push('<tr>');
                                    $.each(obj, function(key, val) { 
                                      items.push('<td><label class="caps" for="'+ key +'">'+ key.replace("_", " ") +'</label><input disabled="disabled" type="text" id="' + key + '" value="' + val + '" /></td>')
                                    }); 
                                    items.push('</tr>');
                                });

                                $('<div/>', {
                                    'class': 'jsonOutput',
                                    html: items.join('')
                                  }).appendTo('#master');

                              break;

                            default: 
                              return false; 
                              break;
                        }

                });
            }
        });
     </script>

    <style type="text/css">
     p, ul {width:100%; text-align:left;font-size:80%;}
     .reports_box {width:auto; padding:25px 20px 20px 20px;border:1px solid #91bce6;background-color:#eff5fb;}
     .inputs {width:300px; font-size:15px;padding:5px;}
     .check input {padding:0 !important;}
     .caps {text-transform:capitalize;}
     #reports_list td, #reports_list tr {padding:10px 0 10px 2px;color:#34567b;}
    </style>

    </head>

 <body>


<div class="reports_box">
    <form id='submit'>

    <fieldset>
    <legend>Select Orders</legend>

    <table id='master'></table>

      </div> <!-- end input1 -->
        <div>
         <button name="select" type="submit" id="btnLoad" value="load">Refresh</button>
         <button name="select" type="submit" id="btnJson" value="down">Download JSON</button>
         <button name="select" type="submit" id="btnView" value="view">View/Enter</button>
        </div>
    </fieldset>

    </form>
</div> <!-- end reports_box -->

  </body>
</html>

3 个答案:

答案 0 :(得分:2)

阻止表单提交,除非由按钮触发。

当按钮触发表单提交时:

  1. 使用$(表单)。serialize()序列化表单
  2. 将“&amp; select = ButtonValue”添加到序列化字符串
  3. 使用$.getJSON向服务器页面发送get请求并返回JSON对象。
  4. 最终编辑:这是我正确使用序列化的工作小提琴:http://jsfiddle.net/YYZGG/5/

    (使用代码时将表单操作更改为正确的页面)

答案 1 :(得分:0)

$(function(){
        $("form").submit(function() 
        {
            var state;

            /* what obj are we recieving?
            $.each($(this), function(index, obj) {
                console.log('Index: ' + index + ' Obj: '+ obj);
                // returns this B/S: Index: 0 Obj: [object HTMLFormElement]
            });
            */

            $('button').click(function() {
                state = $(this).val();
                return true;
            });

            // state is NOW DEFINED
            console.log(state);

            // $this.button.val() never makes it through?
            queryJsonServer($(this), state, "class/");
            return false;

             .......................

此外,如果无法获得正确的值,请尝试:

$('button').on('click', function(e) {
    console.log(e.target.value);
});   

编辑:

你确定它不应该只是:

$("form").submit(function(e) {
            var state = e.target.value;
            console.log(state);
---------

答案 2 :(得分:0)

为什么您提交的内容中不包含帖子?您使用的方法是GET,这就是为什么它不是POST,要么一起使用.submit().post(),要么只使用完全不同的方法,使用GET和{{ 1}}函数,但这里是使用.click()的示例:

.post()

http://api.jquery.com/jQuery.post/