【问题标题】:change table value after select dropdown using javascript使用javascript选择下拉列表后更改表值
【发布时间】:2016-03-08 07:36:02
【问题描述】:

这是我的网站

JSP & Javascript

<div class="col-xs-3 col-md-8">
        <div class="panel panel-default">
        <div class="panel-body">
        <div class="row">
        <div class="col-xs-3 col-md-3">
        <select class="form-control" id="pertahun" name="dropdown">
                <option selected="selected">PILIH</option>
                <c:forEach var="i" begin="${th1}" end="${th}">
                <option> <c:out value="${i}"/></option>
                </c:forEach>
            </select>
            </div>
            </div>
            <div class="row">
            <div class="col-xs-1 col-md-4" id="tabel"></br>
            <table id="tab" class="table">
                <thead><tr>
                    <th align="center">#</th>
                    <th align="center">Merk</th>
                    <th align="center">Tanggal</th>

                </tr></thead>
                <tbody>
                <c:forEach items="${merk}" var="m">
                <tr>
                    <td>${m.id_mntnc_tkn}</td>
                    <td>${m.merk}</td>
                    <td>${m.tahun}</td>
                </tr>
               </c:forEach>
                </tbody>
                </table>
            </div>
            </div>
        <p></p>

        </div>
        </div>

        </div>

这是js:

<script type="text/javascript">
  $('#pertahun').change(function(){
     var str = $('#pertahun').find(":selected").text();
     //alert(str);
     $.ajax({
         url : 'merk-edc-mslh.html',
         data: {"year":str},
         dataType : "json",
         cache : false,
         contentType : 'application/json; charset=utf-8',
         type : 'GET'
    });
});
</script>

这是我的控制器

@RequestMapping(value = "/merk-edc-mslh", method = RequestMethod.GET)
    public @ResponseBody
    String getmerk(@RequestParam("year") String year,Map<String, Object> map) throws JSONException {

        DateFormat dateFormat = new SimpleDateFormat("yyyy");
        Date date = new Date();
        if("PILIH".equals(year)){
            year = dateFormat.format(date);
        }
        JSONArray result = new JSONArray();
        RestTemplate tmp = new RestTemplate();
        String url = ut+"/bar/dash-merk/"+year;
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        tmp.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

        dash_merkModel[]dash=tmp.getForObject(url, dash_merkModel[].class);

        JSONObject jsonObj = new JSONObject();
        jsonObj.put("merk", dash);
        return jsonObj.toString();
    }

以及选择下拉菜单时的此 JSON 消息

{"merk":[{"merk":"ingenico","tahun":"2015","sn":"14325CT22949427","id_mntnc_tkn":10}]}

但是为什么数据表里没有变化呢?

【问题讨论】:

    标签: javascript jquery json spring-mvc


    【解决方案1】:

    但是为什么在数据表中没有改变呢?

    这是因为你没有告诉你的脚本对你得到的响应做任何事情。

    <script type="text/javascript">
      $('#pertahun').change(function(){
         var str = $('#pertahun').find(":selected").text();
         //alert(str);
         $.ajax({
             url         : 'merk-edc-mslh.html',
             data        : {"year":str},
             dataType    : "json",
             cache       : false,
             contentType : 'application/json; charset=utf-8',
             type        : 'GET',
             success     : function(data){ // this is where you do something with response
                console.log(data);
    
                // The below is my assumption like filter the trs which do not contain 
                // 2015
                var yr = data.merk[0].tahun; // 2015
                $('#tab tbody').find('tr').filter(function(tr){
                   $(tr).find('td').last().text().trim() !== yr;
                }).hide();
             }
        });
    });
    </script>
    

    根据您的评论,您可以这样做:

     success     : function(data){
        var resp = data.merk[0]; // 2015
        $('#tab tbody').append(function(){
           return $('<tr>',{
              html:'<td>'+ resp.id_mntnc_tkn +'</td><td>' + resp.merk + '</td><td>'+ resp.tahun +'</td>'
           });
        });
     }
    

    【讨论】:

    • 我想根据我得到的JSON来改变表格的内容, ${m.id_mntnc_tkn} ${m.merk} td> ${m.tahun} 但是怎么改呢?
    • 更改内容或将现有的 trs 替换为新的或添加新的 tr ???请具体说明。
    • 上图是我选择下拉到2015后但表格不变
    【解决方案2】:

    我希望您将更改事件函数保存在适当的位置,并且正在调用更改回调。如果没有你可以把脚本jQuery $(document).ready() 函数。

    现在您的下拉更改事件被触发并正在调用回调。但是我看不到你在 ajax 调用完成后对响应做任何事情。 IE。您需要一个成功回调,该回调将在 ajax 调用成功完成后执行。之后,您必须根据您的发展来处理响应。所以ajax调用会像

        $.ajax({
                 url : 'merk-edc-mslh.html',
                 data: {"year":str},
                 dataType : "json",
                 cache : false,
                 contentType : 'application/json; charset=utf-8',
                 type : 'GET',
                 success: function(response, status){
                   for (var i = 0; i < response.merk.length; i++) {
                       var m = response.merk[i];
                       var tableHtml += "<tr>" 
                           +"<td>"+ m.id_mntnc_tkn+"</td>"
                           + "<td>"+ m.merk+"</td>"
                           +  "<td>"+ m.tahun +"</td>"
                           + "</tr>";
                   }
    
                 $('#tab tbody').html(tableHtml);
                 }
            });
    

    我没有jsp绑定的经验。通常只使用jquery的人会生成表格html并直接放在选择表格中。 AngularJs/reactJs 等客户端框架将通过更新绑定的对象/变量来自动更新表格

    【讨论】:

    • 如何更新表格,我从控制器得到这样的响应 {"merk":[{"merk":"ingenico","tahun":"2014","sn":" 14325CT22949427","id_mntnc_tkn":9}]} 。如果我在下拉列表中选择“2014”。这是完整的日志 HibernateLog --> 15:37:10 DEBUG org.hibernate.SQL - select * from dash_merk where tahun ='2014' 2016-03-08 15:37:10调试 SQL:109 - select * from dash_merk where tahun ='2014' Hibernate: select * from dash_merk where tahun ='2014' 发送此数据以查看 meeeeeeeeeeeerk: {"merk":[{"merk":"ingenico"," tahun":"2014","sn":"14325CT22949427","id_mntnc_tkn":9}]}
    • 我已经更新了ajax调用,看看那个。那应该可以解决您的问题,您将无法再在表中使用 JSTL,并且您的表更新将仅由 javascript 完成
    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 2012-12-09
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多