2010-02-28 27 views
5

Tôi cần nắm bắt sự kiện khóa để cung cấp xác thực trực tiếp khi người dùng nhập vào một đầu vào (sự kiện thay đổi chỉ kích hoạt khi đầu vào mất tiêu điểm).JavaScript: Cách nhận giá trị của phần tử đầu vào người gửi từ sự kiện khóa?

Tôi gặp sự cố khi nhận giá trị đã chỉnh sửa của dữ liệu nhập đã kích hoạt phần mềm bị xóa.

Mã cũng chạy trên bộ hẹn giờ để ngăn nhiều cuộc gọi khi người dùng nhập (chỉ kích hoạt mỗi 500 ms).

Tôi có một số nguyên liệu đầu vào với lớp "priceinput" và đính kèm để KeyUp sự kiện của mỗi giống như sau:

<script language="javascript" type="text/javascript"> 
    var timer; 
    $(document).ready(function() 
    { 
     $(".priceinput").each(function() 
     { 
      $(this).keyup(function(e) 
      { 
       clearTimeout(timer); 
       timer = setTimeout(function() 
       {  
       //how to get the value of the input element that was changed? 
       var value = ???; 
        $.getJSON('/Validator/IsValidInput', { input: value }, 
        function(response) 
        { 
         //indicate if input is correct 
        }); 
       }, 500); 
      }); 
     }); 
    }); 
</script> 

Để có được giá trị người gửi đầu vào, tôi đã cố gắng $(this).val, this.val(), e.target.val() nhưng không ai có vẻ công việc.

Làm cách nào để nhận được giá trị của đầu vào người gửi?

Trả lời

6

Vấn đề là trong chức năng hết thời gian chờ của bạn, bạn đã mất tham chiếu "này" đối với yếu tố đầu vào. Hãy thử một cái gì đó như thế này:

$('.priceinput').keyup(function(e) { 
    var $input = $(this); 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
    var value = $input.val(); 
    $.getJSON(...); 
    }, 500); 
}); 
+2

1 Đây là một mô hình rất phổ biến khi giao dịch với timeouts và callbacks. Cũng lưu ý rằng như các chương trình nhọn, các .each() là không cần thiết, jquery xử lý nó trong nội bộ. –

+0

Chỉ cần một lưu ý cho những người tự hỏi về $ đăng nhập ** $ đầu vào **: nó là một phần của tên của biến và trong trường hợp này nó được sử dụng để chỉ ra rằng biến là một đối tượng jQuery. Xem [tại đây] (http://stackoverflow.com/questions/205853/why-would-a-javascript-variable-start-with-a-dollar-sign) để biết chi tiết. – rob74

1

Trong Internet Explorer nó phải được event.srcElement, trong Firefox event.target.
Hoặc thử event.toElementevent.relatedTarget.

(và dĩ nhiên kết hợp chúng với .value hoặc .val())

Các vấn đề liên quan