2015-07-02 18 views
10

Tôi có một chức năng đó được gọi là trong một sự kiện onclick trong một lĩnh vực hộp kiểm.Nhận id của một phần tử thông qua một hàm

<input type='checkbox' checked='' onclick='return changeEnable();' id='someid'> 

và chức năng

function changeEnable() 
{ 
    var val = $(this).attr('id'); 
    alert(val); 
} 

Tôi có đó nhưng nó sẽ trả về undefined. Cú pháp của tôi sai hay tôi đã bỏ lỡ điều gì đó?

Những hộp kiểm được tự động tạo ra và có id khác nhau, đó là lý do tại sao tôi muốn nhận được id cho một số nhiệm vụ.

Trả lời

19

Lưu ý rằng this trong chức năng changeEnable của bạn sẽ là window. Bạn cần phải vượt qua tham chiếu đến phần tử như một tham số cho hàm:

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'> 
function changeEnable(el) { 
    var val = el.id 
    alert(val); 
} 

Hoặc, như một sự cải tiến, sử dụng Javascript để đính kèm các sự kiện của bạn cho một tách tốt hơn các mối quan tâm:

<input type="checkbox" id="someid"> 
$(function() { 
    $('#someid').change(function() { 
     var val = this.id 
     alert(val); 
    } 
}); 

Lưu ý rằng ở trên sử dụng sự kiện change của hộp kiểm, điều này tốt hơn vì lý do trợ năng.

+0

Wow. hoạt động hoàn hảo. Cảm ơn lời nhắc. Tôi sẽ chọn câu trả lời này sau khi hẹn giờ :) Cảm ơn bạn! – jackhammer013

+0

Không sao, vui lòng trợ giúp. –

+0

Câu trả lời hay, được bỏ phiếu. Đối với những người mới đến JS (trong trường hợp này JQuery) và muốn sử dụng các sự kiện JS, cho kịch bản này, bạn rõ ràng là không có ID, vì vậy bạn muốn gán một lớp học để các đầu vào '', và sử dụng rằng '$ ('. myInputClass')'. – MasNotsram

4

tôi nghĩ rằng mã này sẽ giúp ua nhiều

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'>` 
function changeEnable(thisobj) 
{ 
    var val = thisobj.id; 
    alert(val); 
} 
+0

Đừng quên tham số trong hàm 'changeEnable'. –

+0

Cảm ơn bạn! Nếu tôi chỉ có thể chọn điều này là tốt. – jackhammer013

+1

Vui lòng giải thích lý do tại sao điều này sẽ hữu ích. – curiousdannii

2

sử dụng theo cách này:

<input type='checkbox' checked='' onclick='changeEnable(this);' id='someid'> 
function changeEnable(el) 
{ 
    var val = el.id; 
    alert(val); 
} 
+0

Tại sao tính năng này hoạt động? – curiousdannii

+0

hoạt động, hãy thử. Tôi chỉ sử dụng javascript. –

+0

Hãy so sánh câu trả lời của bạn với Rory, người thực sự giải thích tại sao các mã hoạt động. – curiousdannii

3

Ngoài ra, bạn cần phải nhận thức phương pháp .call mà ném bối cảnh đầu vào để hoạt động.

<input type='checkbox' checked='' onclick='changeEnable.call(this);' id='someid'> 

function changeEnable() 
{ 
    var val = this.id; 
    alert(val); 
} 
Các vấn đề liên quan