Javascript $(';#id#u性别';)与var性别=$(';#id#u性别';)

Javascript $(';#id#u性别';)与var性别=$(';#id#u性别';),javascript,jquery,Javascript,Jquery,用户需要选择性别 HTML <form ...> <select id="id_gender" name="gender" onchange="hideMaidenName(this.value)"> <option value="M">Male</option> <option value="F">Female</option> <option value="U" selected="selected">To

用户需要选择性别

HTML

<form ...>
<select id="id_gender" name="gender" onchange="hideMaidenName(this.value)">
<option value="M">Male</option>
<option value="F">Female</option>
<option value="U" selected="selected">To be defined</option>
</select>
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js">
半工作代码(功能减少,因为我未能将性别值更改回“U”:

var gender = $('#id_gender')

gender
[<select id=​"id_gender" name=​"gender" onchange=​"hideMaidenName(this.value)​">​…​</select>​]

gender.val()
"U"
var maiden_name = $('#id_maiden_name');

function hideMaidenName(gender) {
        if ($('#id_gender').val() == 'M') {         
            if (maiden_name.val() != "") {
                $('#id_gender').val('U')
                alert("Clear maiden name!");
                return;             
            }           
        }

    }

</script>
var gender = $('#id_gender');
var maiden_name = $('#id_maiden_name');
var maiden_name_row = $('#id_maiden_name_row')
function hideMaidenName(gender) {        
    if (gender.val() == 'M') {          
        if (maiden_name.val() != "") {
            gender.val('U')
            alert("Claear maiden name!");
            return;             
        }

        maiden_name_row.hide()
    }
    else {
        maiden_name_row.show()
    }
}
var gender = $('#id_gender');
var maiden_name = $('#id_maiden_name');

function hideMaidenName(gender) {        
    if (gender == 'M') {            
        if (maiden_name.val() != "") {              
            alert("Claear maiden name!");
            return;             
        }   
    }
}
问题是:

  • $(“#id_-gender”)和var-gender=$(“#id_-gender”)之间的区别是什么。我的意思是为什么前者工作得很好,而后者抛出了一个异常

  • 为什么在半工作代码中,gender=='M'工作得很好?gender似乎是一个元素,我要检查它的值。但是这里我们在gender中存储了值本身

  • 我有工作代码,但我两次寻找性别元素。 如果可能,我应该如何防止重复查找


  • 不必设置选择字段的值,只需将选项设置为手动选择的值U即可

    $('select#id_gender option[value="U"]').prop('selected', true)
    
    编辑:

    var gender = $('#id_gender');
    var maiden_name = $('#id_maiden_name');
    function hideMaidenName(gender) {        
       if (gender == 'M') {            
          if (maiden_name.val() != "") {          
              //selecting option with value "U"   
              $('select#id_gender option[value="U"]').prop('selected', true)
              return;             
          }   
      }
    }
    
    编辑2:

  • 没有区别,区别在于您将元素写入一个变量,而不需要多次搜索DOM

  • 我稍后会尝试回答其他问题。

    您在更改时将所选选项的值作为参数传递给函数
    hidemaidname
    (这是字符串,例如
    'M'
    )。我将其更改为传递DOM元素(
    select
    ),通过将
    作为参数传递。您还必须包装
    性别
    ,并将其用作jquery对象,例如
    $(性别)
    ,否则会出现错误
    。val()
    不是函数:

    var-gender=$('id#u-gender');
    var maiden_name=$('id_maiden_name');
    var maiden_name_row=$(“#id_maiden_name_row”)
    功能hideMaidenName(性别){
    //这里您必须使用性别作为jquery对象
    if($(性别).val()=='M'){
    if(maiden_name.val()!=“”){
    性别。val('U'))
    警报(“克莱尔少女的名字!”);
    返回;
    }
    maiden_name_row.hide()
    }否则{
    处女之名行。秀()
    }
    }
    
    男性
    女性
    待定义
    
    $('#id_-gender')
    返回一个类似数组的对象,该对象包含与选择器匹配的所有元素。
    var-gender=$('#id_-gender')
    为该类似数组的对象分配一个变量。@Alex-Char,换句话说,在gender中我们放置了一个数组。但是为什么行为会如此不同?为什么我们在那里只找到一个字符串(以半工作代码为例)等等,所有的问题都在这里。非常感谢你的回答。但我不仅想得到工作代码,而且想了解这里发生了什么。你能帮我回答这些问题吗?