无法以 jQuery 形式获取选择值

Posted

技术标签:

【中文标题】无法以 jQuery 形式获取选择值【英文标题】:Can't get select value in jQuery form 【发布时间】:2020-07-11 02:32:54 【问题描述】:

我制作了一个带有两个下拉选择框的模态表单。单击第一个选择框时,我创建了另一个依赖于第一个选择的选择选项。单击保存按钮时,我想保存第一个选项和第二个选项。但无法获得第二个选项。

这是我的代码:

$('#btnSave').click(function()
            var url = $('#myForm').attr('action');
            var data = $('#myForm').serialize();
            var subjects = $('select#subs option:selected').val(); 
                var result = '';
            alert (data);

                $.ajax(
                    type: 'ajax',
                    method: 'post',
                    url: url,
                    data: data,
                    async: false,
                    dataType: 'json',
                    success: function(response)
                        //alert ("here");
                        if(response.success)
                            $('#myModal').modal('hide');
                            $('#myForm')[0].reset();
                            if(response.type=='add')
                                var type = 'added'
                            else if(response.type=='update')
                                var type ="updated"
                            
                            $('.alert-success').html('Subject '+type+' successfully').fadeIn().delay(4000).fadeOut('slow');
                            showAllTeachers();
                        else
                            alert('Error');
                        
                    ,
                    error: function()
                        alert('Could not add data');
                    
                );
            //);
        );

        $('#cls').change(function()
        var classes  = $('#cls option:selected').val(); 
        $.ajax(
                type: 'ajax',
                method: 'post',
                url: '<?php echo base_url() ?>index.php/teacher/load_subjects',
                data: class_id:classes,
                async: false,
                dataType: 'json',
                success: function(data)
                    //alert(data);
                    var html = '<option value="">Select Subject</option>';
                    var i;
                    for(i=0; i<data.length; i++)

                        html +='<option'+
                                    ' value= "'+data[i].subject_id+'">'+data[i].subject_name+'</value>'+
                                '</option>';
                    
                    $('#subs').html(html);
                
            );

        );



    //edit
    $('#showdata').on('click', '.assign-subject', function()
        var id = $(this).attr('data');

        $('#myModal').modal('show');
        $('#myModal').find('.modal-title').text('Assign Subject');
        $('#myForm').attr('action', '<?php echo base_url() ?>index.php/teacher/update_teacher');
        $('input[name=teacher_id]').val(id) ;   
        var subjects = $$('select[name=subjects]').val();//('select#subs option:selected').val(); 
        $.ajax(
            type: 'ajax',
            method: 'post',
            url: '<?php echo base_url() ?>index.php/teacher/update_teacher',
            data: id: id, classes: classes, subjects: subjects,
            async: false,
            dataType: 'json',
            success: function(data)

                $('select[name=subjects]').val();
                alert("In edit");

            ,
            error: function()
                alert('Could not Edit Data');
            
        );
    );

另外,保存后我想清除表单选择值。我该怎么做?

【问题讨论】:

请提供一个最小的、可重现的例子:***.com/help/minimal-reproducible-example $$('select[name=subjects]').val(); 是什么,这是错字吗? 【参考方案1】:

考虑下面的代码。

$(function() 
  var options = [
    [
      label: "Select Header",
      val: ""
    , 
      label: "Opt A",
      val: "a"
    , 
      label: "Opt B",
      val: "b"
    , 
      label: "Opt C",
      val: "c"
    ],
    [
      label: "Select Subject",
      val: ""
    , 
      label: "Opt D",
      val: "d"
    , 
      label: "Opt E",
      val: "e"
    , 
      label: "Opt F",
      val: "f"
    ],
    [
      label: "Select Topic",
      val: ""
    , 
      label: "Opt G",
      val: "g"
    , 
      label: "Opt H",
      val: "h"
    , 
      label: "Opt I",
      val: "i"
    ]
  ];

  function updateOptions(trg, data) 
    trg.html("");
    $.each(data, function(k, item) 
      $("<option>", 
        value: item.val
      ).html(item.label).appendTo(trg);
    )
  

  function clearOptions(trg) 
    trg.html("");
    trg.hide();
  

  $("#select-1").change(function() 
    var sel = parseInt($(this).val());
    if (isNaN(sel)) 
      return false;
    
    updateOptions($("#select-2"), options[sel]);
    $("#select-2").parent().fadeIn();
  );

  $("#select-2").change(function() 
    $("#myForm button[type='submit']").prop("disabled", false);
  );

  $("#myForm").submit(function(e) 
    e.preventDefault();
    var myData = $(this).serialize();
    console.log(myData);
    $(this)[0].reset();
    clearOptions($("#select-2"));
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="myForm">
  <label>Select Option: </label>
  <select id="select-1" name="select-option-1">
    <option></option>
    <option value="0">Header</option>
    <option value="1">Subject</option>
    <option value="2">Topic</option>
  </select>
  <span class="hidden-select" style="display: none;">
    <select id="select-2" name="select-option-2">
    </select>
  </span>
  <br />
  <button type="submit" disabled="disabled">Save</button>
</form>

由于您没有在帖子中提供 HTML,我不得不猜测您的脚本为什么不起作用。 .serialize() 使用 Name 属性,所以我首先怀疑您的 HTML 表单元素没有所有正确的属性。

【讨论】:

非常感谢。你的代码真的很干净,但我正在尝试以弹出模式形式显示我的表单。 @Sijran 应该没有什么不同。你也没有在你的帖子中提出这一点;因此我要求一个最小的、可重现的例子。

以上是关于无法以 jQuery 形式获取选择值的主要内容,如果未能解决你的问题,请参考以下文章

jQuery获取元素值以及设置元素值总结

如何以select2形式从数据库中获取然后显示值

我以元组形式获取 SELECT mysql 值。如何以字符串形式获取它?

jquery之从ajax获取json数据以表格的形式显示在页面上

第一次选择未定义以 redux 形式选择表单值

设置默认值以使用反应形式进行选择