【问题标题】:v-model is not updated in when using radio button in vue js?在 vue js 中使用单选按钮时 v-model 没有更新?
【发布时间】:2018-05-22 08:01:40
【问题描述】:

我浏览了文档并尝试了以下代码。我可以得到enquiryDesc 的数据,但我总是得到 5 的评级。我也尝试将无线电组更改为复选框,但它不起作用。

我的html 表单:

<form id="enquiryBox" method="POST" data-parsley-validate="true" v-on:submit.prevent="handelSubmit()">
  <div class="modal-body brbottom-20">
    <div class="clearfix">
      <div class="col-lg-6">
        <div class="form-group required">
      <fieldset class="rating">
                <input v-model="rating" type="radio" id="rating" name="rating" value="5" ><label class = "full" for="star5" title="Awesome">5</label>
                <input v-model="rating" type="radio" id="rating" name="rating" value="4" ><label class="half" for="star4half" title="Pretty good">4</label>
    </fieldset>
        </div>
      </div>
      <div class="col-lg-6">
        <div class="form-group required">
          <label>Enquiry</label>
          <textarea placeholder="Write your enquiry here" rows="7" id="enquiryDesc" name="enquiryDesc" class="form-control required" title="Desc" v-model="enquiryDesc" required="required"></textarea>
        </div>
      </div>
    </div>
  </div>
  <div class="">
    <button id="btn-submit-enquiry" class="btn whiteButton" type="submit">Post Enquiry</button>
  </div>
</form>

我的 Vue.js 脚本:

enquiryBox = new Vue({
   el: "#enquiryBox",
   data: {
     rating: '',
     enquiryDesc: '',
   },
   methods: {
     handelSubmit: function(e) {
       var vm = this;
       data = {};
       data['rating'] = this.rating;
       data['enquiryDesc'] = this.enquiryDesc;
       console.log(data);

       $.ajax({
         url: 'https://api/post/add_review/',
         data: data,
         type: "POST",
         dataType: 'json',
         success: function(e) {
           if (e.status) {
             alert("Success")

           } else {
             vm.response = e;

             alert(" Failed")
           }
         }
       });
       return false;
     }
   },
 });

我对@9​​87654325@的回复

{rating: "", enquiryDesc: "hello how are you"}

rating 的值永远不会改变,它总是保持 5。

【问题讨论】:

    标签: javascript vue.js vue-component vue-router vue-resource


    【解决方案1】:

    您不应该将值绑定到收音机,因为您不需要修改它们,

    v-bind:value="5" 和 v-bind:value="4" 只需删除这些行而不是使用普通 value="4" 和 value="5"

    在数据中您不需要设置 rating : 5 只需使用 rating :'' 用户将选择,然后将填充此数据。

    签出这个 sn-p。

    enquiryBox = new Vue({
       el: "#enquiryBox",
       data: {
         rating: '',
         enquiryDesc: '',
       },
       methods: {
         handelSubmit: function(e) {
           var vm = this;
           data = {};
           data['rating'] = this.rating;
           data['enquiryDesc'] = this.enquiryDesc;
           console.log(data);
    
           
           return false;
         }
       },
     });
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>VueJS</title>
        <script  src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
    </head>
    <body>
        
            <form id="enquiryBox" method="POST" data-parsley-validate="true" v-on:submit.prevent="handelSubmit()">
      <div class="modal-body brbottom-20">
        <div class="clearfix">
          <div class="col-lg-6">
            <div class="form-group required">
          <fieldset class="rating">
                    <input v-model="rating" type="radio" id="rating" name="rating" value="5" ><label class = "full" for="star5" title="Awesome">5</label>
                    <input v-model="rating" type="radio" id="rating" name="rating" value="4" ><label class="half" for="star4half" title="Pretty good">4</label>
        </fieldset>
            </div>
          </div>
          <div class="col-lg-6">
            <div class="form-group required">
              <label>Enquiry</label>
              <textarea placeholder="Write your enquiry here" rows="7" id="enquiryDesc" name="enquiryDesc" class="form-control required" title="Desc" v-model="enquiryDesc" required="required"></textarea>
            </div>
          </div>
        </div>
      </div>
      <div class="">
        <button id="btn-submit-enquiry" class="btn whiteButton" type="submit">Post Enquiry</button>
      </div>
    </form>    
    
    
    </body>
    
    </html>

    其他方式点击数字然后按提交你可以看到它的更新:

    var enquiryBox = new Vue({
       el: "#enquiryBox",
       data: {
         rating: '',
         enquiryDesc: '',
       },
       methods: {
         handelSubmit: function(e) {
           var vm = this;
           data = {};
           data['rating'] = this.rating;
           data['enquiryDesc'] = this.enquiryDesc;
           console.log(data);       
           return false;
         }
       },
     });
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>VueJS</title>
        <script  src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
    </head>
    <body>
        <div id="enquiryBox">
            <form method="POST" data-parsley-validate="true" v-on:submit.prevent="handelSubmit()">
              <div class="modal-body brbottom-20">
                <div class="clearfix">
                  <div class="col-lg-6">
                    <div class="form-group required">
                      <fieldset class="rating">
                        <span @click="rating = 1">1</span>
                        <span @click="rating = 2">2</span>
                        <span @click="rating = 3">3</span>
                      </fieldset>
                    </div>
                  </div>
                  
                </div>
              </div>
              <div class="">
                <button id="btn-submit-enquiry" class="btn whiteButton" type="submit">Post Enquiry</button>
              </div>
            </form>
        </div>
    
    
    </body>
    
    </html>

    【讨论】:

    • 先生,这些我都试过了。但对我来说什么也没有发生。我被困在这 2 天,仍然没有运气
    • 在 sn-p 中检查它的工作正常。如果仍然无法正常工作,请为我提供工作 url 或类似的东西,以便我可以调试它。
    • 我在本地做,后端是 django
    • 在这种情况下它也不会起作用,您是否检查了 sn-p "Run Code sn-p" 并对其进行测试,在我的回答中,它的工作原理
    • 有没有其他办法。
    【解决方案2】:

    我遇到了类似的问题!我使用 :value 和 @change 事件解决了它。

     <input :value="rating" @change="rating=$event" type="radio" id="rating" name="rating" value="5">
            
    

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 1970-01-01
      • 2018-08-31
      • 2020-09-13
      • 2016-11-12
      • 2019-09-20
      • 2022-07-15
      • 2016-08-28
      • 2014-07-12
      相关资源
      最近更新 更多