Cách truyền tham số trên onChange của html chọn


197

Tôi là người mới làm quen với JavaScript và jQuery. Tôi muốn hiển thị một combobox-A, đó là một HTML <select>với idnội dung được chọn và nội dung của nó ở vị trí khác trên onChange ().

Làm cách nào tôi có thể vượt qua hộp tổ hợp hoàn chỉnh với lựa chọn của nó idvà làm cách nào tôi có thể vượt qua các tham số khác khi phát sinh sự kiện onChange?


5
bạn có thể gửi một số mã xin vui lòng?
KJYe.Name

Câu trả lời:


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>

Ví dụ trên giúp bạn nhận được giá trị đã chọn của hộp tổ hợp trong sự kiện OnChange .


Cảm ơn, điều này đã làm việc cho tôi. Về cơ bản tôi muốn hiển thị cùng một combobox ở những nơi khác nhau, vì vậy tôi đã đưa 2 id khác nhau cho 2 combobox. Dù sao đi nữa, tôi có thể hiển thị cùng một combobox ở những nơi khác nhau. Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào.
Gendaful

13
Một cách ngắn gọn hơn để lấy lại giá trị bên trong getComboA()var value = sel.value;
Yony

4
Sự kiện thay đổi chỉ kích hoạt nếu hộp chọn mất tiêu điểm. Có cách nào để kích hoạt sự kiện ngay lập tức sau khi thay đổi giá trị không?
doABarrelRoll721

2
sử dụng this.value thay vào đó và nó sẽ hoạt động =) gửi cái này đang gửi toàn bộ phần tử chọn
Colin Rickels

Đối với trường hợp của tôi, mã đang hoạt động trên Firefox nhưng không phải trên Chrome.
avijit bhattacharjee

50

Một cách tiếp cận khác có thể có ích trong một số trường hợp, là chuyển <option />trực tiếp giá trị được chọn vào hàm như thế này:

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
Đây chính xác là những gì tôi cần. Đã có chức năng javascript thay đổi pic màu khi nhấp vào mẫu màu. Nhưng cũng có một yêu cầu cho nó hoạt động trên các tùy chọn chọn thả xuống PayPal. Đã sử dụng cái này nhưng thay vì sử dụng 'value' (vì tôi cần nó cho Paypal) tôi đã thêm một 'nhãn' cho mỗi tùy chọn với các tên biến tôi đã sử dụng để thay đổi các bức ảnh. Làm việc hoàn hảo! Cảm ơn!!
FlashNoob468

5
Cái này đẹp đấy. Một tùy chọn đơn giản khác hợp lệ là: <select onChange = "myFunction (this.value)">
Daniel Silva

1
Hữu ích để truy cập các thuộc tính khác của tùy chọn đã chọn.
Cees Timmerman

31

Để biết cách thực hiện trong 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>

Bạn cũng nên biết rằng Javascript và jQuery không giống nhau. jQuery là mã JavaScript hợp lệ, nhưng không phải tất cả JavaScript đều là jQuery. Bạn nên tìm kiếm sự khác biệt và chắc chắn rằng bạn đang sử dụng một sự phù hợp.


2
Tôi đã thử điều này, nhưng chức năng thay đổi không được gọi ngay cả khi tôi đặt phương thức document. Yet. Mã của tôi là htmlData.push ('<select id = "select" name = "select">'); $ ('# select'). change (function () {alert ('thay đổi được gọi'); alert ('Tùy chọn có giá trị' + $ (this) .value () + 'và văn bản' + $ (this). text () + 'đã được chọn.'); Xin hãy giúp tôi với điều này.
Gendaful

@Gendaful: htmlData.push($('<select id="choose" name="choose">'));nên thực hiện thủ thuật (bạn đã đẩy một chuỗi thay vì một nút đầy đủ trước đó). > 6 năm trôi qua ...
Johannes

6

Giải pháp 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>

hoặc là

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

hoặc là

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

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

Đây là giải pháp tổng quát và toàn diện nhất ở đây. Cảm ơn!
divs1210

5

Tôi thấy câu trả lời của @ Piyush rất hữu ích và chỉ cần thêm vào nó, nếu bạn lập trình tạo một lựa chọn, thì có một cách quan trọng để có được hành vi này có thể không rõ ràng. Giả sử bạn có một chức năng và bạn tạo một lựa chọn mới:

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

Các hành vi bình thường có thể nói

newSelect.onchange = changeitem;

Nhưng điều này không thực sự cho phép bạn chỉ định đối số được truyền vào, vì vậy thay vào đó bạn có thể làm điều này:

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

Và bạn có thể thiết lập tham số. Nếu bạn làm theo cách đầu tiên, thì đối số bạn sẽ nhận được cho onchangechức năng của mình sẽ phụ thuộc vào trình duyệt. Cách thứ hai dường như chỉ hoạt động trên nhiều trình duyệt.


1
evalChuyển đổi chuỗi thành mã giống như ác của bạn là không cần thiết. Trên thực tế newSelect.onchange = changeitem;hoạt động tốt nếu bạn viết lại thay đổi dưới dạng var changeitem = function () {console.log(this.selectedIndex); };(nghĩa là sử dụng thisthay vì đối số hàm). Hoặc, để lại changeitemnhư là và viết newSelect.onchange = function () {changeitem(this); };.
Steve Byrnes

1
newSelect.setAttribution ('onchange', 'changeitem (this)'); - cổ vũ cho điều đó
ghosh

5

Giải pháp jQuery

Làm cách nào để có được giá trị văn bản của tùy chọn đã chọn

Chọn các yếu tố thường có hai giá trị mà bạn muốn truy cập.
Đầu tiên, có giá trị được gửi đến máy chủ, thật dễ dàng:

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

Thứ hai là giá trị văn bản của lựa chọn.
Ví dụ: sử dụng hộp chọn sau:

<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>

Nếu bạn muốn lấy chuỗi "Mr" nếu tùy chọn đầu tiên được chọn (thay vì chỉ "1"), bạn sẽ làm điều đó theo cách sau:

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

Xem thêm


5

Điều này được giúp đỡ cho tôi.

Để chọn:

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

Đối với radio / hộp kiểm:

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

3

Bạn có thể thử mã dưới đây

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

1

mã này một khi tôi viết chỉ để giải thích về sự kiện chọn, bạn có thể lưu mã này dưới dạng html và xem đầu ra nó hoạt động. Và dễ hiểu cho bạn.

<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

Chỉ trong trường hợp ai đó đang tìm kiếm giải pháp React mà không phải tải xuống các phụ thuộc bổ sung mà bạn có thể viết:

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

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

Đảm bảo liên kết hàm đã thay đổi () trong hàm tạo như:

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

0

Điều này làm việc cho tôi onchange = setLocation($(this).val())

Đây.

    @Html.DropDownList("Demo", 
new SelectList(ViewBag.locs, "Value", "Text"), 
new { Class = "ddlStyle", onchange = "setLocation($(this).val())" });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.