如何在HTML select的onChange上传递参数


197

我是JavaScript和jQuery的新手。我想显示一个combobox-A,它是一个HTML <select>,其选择的id内容在onChange()的另一处。

如何通过选择框传递完整的组合框 id,以及如何在onChange事件触发时传递其他参数?


5
你可以张贴一些代码吗?
KJYe.Name叶家仁2011年

Answers:


370

function getComboA(selectObject) {
  var value = selectObject.value;  
  console.log(value);
}
<select id="comboA" onchange="getComboA(this)">
  <option value="">Select combo</option>
  <option value="Value1">Text1</option>
  <option value="Value2">Text2</option>
  <option value="Value3">Text3</option>
</select>

上面的示例为您提供OnChange事件上组合框的选定值。


谢谢,这对我有用。基本上我想在不同的地方显示相同的组合框,所以我给2个combobox提供了2个不同的ID。无论如何,我可以在不同的地方显示相同的组合框。任何帮助将不胜感激。
Gendaful 2011年

13
检索内部值的更简洁方法getComboA()var value = sel.value;
Yony

4
仅当选择框失去焦点时,才会触发change事件。有没有办法在值更改后立即触发事件?
doABarrelRoll721 '16

2
使用this.value代替,它将起作用=)发送此消息将发送整个select元素
Colin Rickels,2016年

就我而言,代码在Firefox上有效,但在Chrome上无效。
avijit bhattacharjee

50

在某些情况下,另一种可能很方便的方法是将selected的值<option />直接传递给函数,如下所示:

function myFunction(chosen) {
  console.log(chosen);
}
<select onChange="myFunction(this.options[this.selectedIndex].value)">
  <option value="1">Text 1</option>
  <option value="2">Text 2</option>
</select>


1
这正是我所需要的。单击颜色样本时,已经具有可更改彩色图片的JavaScript功能。但也要求它也可以在PayPal下拉选择选项上工作。使用了此选项,但没有使用“值”(因为我在Paypal中需要它),而是向每个选项添加了“标签”,并带有用于更改图片的变量名称。工作完美!谢谢!!
FlashNoob468 2014年

5
很好 另一个更简单的有效选项是:<select onChange =“ myFunction(this.value)”>
Daniel Silva

1
有助于访问所选选项的其他属性。
Cees Timmerman

31

有关如何在jQuery中进行操作:

<select id="yourid">
<option value="Value 1">Text 1</option>
<option value="Value 2">Text 2</option>
</select>

<script src="jquery.js"></script>
<script>
$('#yourid').change(function() {
  alert('The option with value ' + $(this).val() + ' and text ' + $(this).text() + ' was selected.');
});
</script>

您还应该知道Javascript和jQuery不相同。jQuery是有效的JavaScript代码,但并非所有JavaScript都是jQuery。您应该查找差异,并确保使用了适当的差异。


2
我试过了,但是即使我将document.ready方法放入了change函数也没有被调用。我的代码是htmlData.push('<select id =“ choose” name =“ choose”>'); $('#choose')。change(function(){alert('change named'); alert('值为'+ $(this).value()+'且文本为'+ $(this)的选项。 text()+'被选中。');请帮我解决这个问题
Gendaful 2011年

@Gendaful:htmlData.push($('<select id="choose" name="choose">'));应该做到这一点(您之前推送了一个字符串而不是一个成熟的节点)。> 6年过去了……
Johannes

6

JavaScript解决方案

<select id="comboA">
<option value="">Select combo</option>
<option value="Value1">Text1</option>
<option value="Value2">Text2</option>
<option value="Value3">Text3</option>
</select>
<script>
 document.getElementById("comboA").onchange = function(){
    var value = document.getElementById("comboA").value;
 };
</script>

要么

<script>
 document.getElementById("comboA").onchange = function(evt){
    var value = evt.target.value;
 };
</script>

要么

<script>
 document.getElementById("comboA").onchange = handleChange;

 function handleChange(evt){
    var value = evt.target.value;
 };
</script>

这是这里最通用,最全面的解决方案。谢谢!
divs1010

5

我发现@Piyush的答案很有帮助,并且只是添加到其中,如果您以编程方式创建选择,那么有一种重要的方法可以使这种行为不明显。假设您有一个函数并创建了一个新的选择:

var changeitem = function (sel) {
  console.log(sel.selectedIndex);
}
var newSelect = document.createElement('select');
newSelect.id = 'newselect';

正常行为可能是说

newSelect.onchange = changeitem;

但这实际上不允许您指定传入的参数,因此您可以这样做:

newSelect.setAttribute('onchange', 'changeitem(this)');

并且您可以设置参数。如果您采用第一种方法,则函数的参数将onchange取决于浏览器。第二种方法似乎可以跨浏览器正常工作。


1
eval不需要像邪恶的字符串到代码的转换。newSelect.onchange = changeitem;如果将changeitem重写为var changeitem = function () {console.log(this.selectedIndex); };(即使用this而不是函数参数),则实际上可以正常工作。或者,保持changeitem原样并写newSelect.onchange = function () {changeitem(this); };
史蒂夫·伯恩斯

1
newSelect.setAttribute('onchange','changeitem(this)'); -为此
加油-ghosh

5

jQuery解决方案

如何获取所选选项的文本值

选择元素通常具有两个要访问的
首先是要发送到服务器的,这很容易:

$( "#myselect" ).val();
// => 1

第二个是选择的文本值
例如,使用以下选择框:

<select id="myselect">
  <option value="1">Mr</option>
  <option value="2">Mrs</option>
  <option value="3">Ms</option>
  <option value="4">Dr</option>
  <option value="5">Prof</option>
</select>

如果要在选择第一个选项(而不只是“ 1”)的情况下获取字符串“ Mr”,则可以通过以下方式进行操作:

$( "#myselect option:selected" ).text();
// => "Mr"  

也可以看看


5

这对我有帮助。

选择:

$('select_tags').on('change', function() {
    alert( $(this).find(":selected").val() );
});

对于单选/复选框:

$('radio_tags').on('change', function() {
    alert( $(this).find(":checked").val() );
});

3

您可以尝试以下代码

<select onchange="myfunction($(this).val())" id="myId">
    </select>

1

我编写此代码后,只需解释select的onChange事件,您就可以将该代码另存为html并查看其输出。对您来说很容易理解。

<html>
    <head>
        <title>Register</title>
    </head>
    <body>
    <script>
        function show(){
            var option = document.getElementById("category").value;
            if(option == "Student")
                  {
                        document.getElementById("enroll1").style.display="block";
                  }
            if(option == "Parents")
                  {
                        document.getElementById("enroll1").style.display="none";
                  }
            if(option == "Guardians")
                  {
                        document.getElementById("enroll1").style.display="none";
                  }
        }
    </script>
            <form action="#" method="post">
                <table>
                    <tr>
                        <td><label>Name </label></td>
                        <td><input type="text" id="name" size=20 maxlength=20 value=""></td>
                    </tr>
                    <tr style="display:block;" id="enroll1">
                        <td><label>Enrollment No. </label></td>
                        <td><input type="number" id="enroll" style="display:block;" size=20 maxlength=12 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Email </label></td>
                        <td><input type="email" id="emailadd" size=20 maxlength=25 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Mobile No. </label></td>
                        <td><input type="number" id="mobile" size=20 maxlength=10 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Address</label></td>
                        <td><textarea rows="2" cols="20"></textarea></td>
                    </tr>
                    <tr >
                        <td><label>Category</label></td>
                        <td><select id="category" onchange="show()">    <!--onchange show methos is call-->
                                <option value="Student">Student</option>
                                <option value="Parents">Parents</option>
                                <option value="Guardians">Guardians</option>
                            </select>
                        </td>
                    </tr>
                </table><br/>
            <input type="submit" value="Sign Up">
        </form>
    </body>
</html>

1

万一有人在寻找React解决方案而不必下载您可以编写的其他依赖项,以防万一:

<select onChange={this.changed(this)}>
   <option value="Apple">Apple</option>
   <option value="Android">Android</option>                
</select>

changed(){
  return e => {
    console.log(e.target.value)
  }
}

确保像下面这样在构造函数中绑定changed()函数:

this.changed = this.changed.bind(this);

0

这对我有效onchange = setLocation($(this).val())

这里。

    @Html.DropDownList("Demo", 
new SelectList(ViewBag.locs, "Value", "Text"), 
new { Class = "ddlStyle", onchange = "setLocation($(this).val())" });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.