2013-04-17 44 views
5

Chúng tôi có một hộp văn bản nơi người dùng được cho là nhập một số dữ liệu. Tuy nhiên, dữ liệu đó không được vượt quá 500 ký tự. Để hoàn thành việc chúng tôi đã triển khai chức năng sau được gọi là sự kiện KeyUp:Kích thước văn bản thay đổi theo lập trình đang ngăn sự kiện thay đổi

 function keyupMaxLimit(obj, maxlen) { 
      if (parseInt(obj.value.length) > maxlen) { 
       $(obj).val($(obj).val().substr(0,maxlen)); 
      } 
     } 

Điều này đang hoạt động: người dùng không thể tham gia nhiều hơn. Chúng tôi cũng có một chức năng liên quan đến sự kiện Thay đổi của cùng một hộp văn bản, để phát hiện các thay đổi và thực hiện phép thuật của chúng tôi.

$(document).on("change", "#myTextBox", function() { 
     //magic here 
    }); 

Điều này cũng hoạt động: khi người dùng thay đổi văn bản chức năng đang được gọi.

Tuy nhiên, đây là vấn đề của chúng tôi, hai chức năng này không hoạt động cùng nhau. Ví dụ: nếu người dùng giới thiệu nhiều ký tự mà anh ta/cô ấy cho là, chức năng đầu tiên sẽ cắt văn bản nhưng văn bản thứ hai sẽ không được gọi!

Dường như những thay đổi chúng tôi thực hiện cho hộp văn bản trên chức năng đầu tiên là ngăn chặn/xóa sự kiện Thay đổi. Điều này có đúng không? Có cách giải quyết nào không? Tôi không thể kích hoạt một cách rõ ràng sự kiện Change trên hàm đầu tiên bởi vì chúng ta sẽ tạo các thay đổi không cần thiết.

EDIT - Bạn có thể thấy điều này xảy ra ở đây: http://jsfiddle.net/jpaires/dpujx/ Mở bảng điều khiển của trình duyệt và viết "12345" trên hộp văn bản. Sự kiện sẽ được kích hoạt ("a-ok" trên bảng điều khiển). Tuy nhiên, nếu bạn viết "123456" thì văn bản sẽ bị cắt và sự kiện sẽ KHÔNG được kích hoạt (không có "a-ok" trên bảng điều khiển). Cảm ơn Juhana :)

+0

Giả sử rằng "ma thuật" chỉ là 'keyupMaxLimit (điều này, 500); 'nó sẽ hoạt động tốt. Không có gì ở đó sẽ xóa một trình xử lý sự kiện – Archer

+0

sự kiện khóa của bạn có thể có một số lỗi .. vui lòng cho chúng tôi biết mã đó ... quá – Darshan

+0

@Archer Vâng, đúng vậy. Trong thẻ textarea của tôi, tôi có thuộc tính như sau: onkeyup = "keyupMaxLimit (this, 500); – jpaires

Trả lời

-3

tôi nên đưa ra một thử để hạn chế số ký tự trong đầu vào html như thay vì điều này:

<input type="text" id="Textbox" name="Textbox" maxlength="500" /> 

điều khác là nếu bạn muốn làm điều gì đó khi thay đổi đầu vào văn bản, và tôi nghĩ rằng trong trường hợp này bạn có thể sử dụng các sự kiện KeyUp vào đầu vào cũng có, như thế này:

$(document).on("keyup", "#myTextBox", function() { 
//SOMETHING 
}); 

tôi cập nhật fiddle này với sugestion của tôi và nó hoạt động ... http://jsfiddle.net/BdqDB/

Bằng cách này, bạn luôn kích hoạt nhật ký và văn bản bị giới hạn.

Các giải pháp khác là: Nếu bạn muốn tiếp tục sử dụng chức năng của bạn để cắt văn bản tôi sẽ làm như thế này:

$(document).on("keyup", "#myTextBox", function() { 
    keyupMaxLimit(this,5); 
    console.log('other stuff'); 
}); 

Xem làm việc này trên http://jsfiddle.net/wTQa4/1/

Nếu bạn kiểm tra sự thay đổi tài liệu jquery bạn có thể tìm thấy: "Sự kiện thay đổi được gửi đến một phần tử khi giá trị thay đổi. Sự kiện này bị giới hạn ở các phần tử, hộp và phần tử. lựa chọn với chuột, nhưng đối với các yếu tố khác, loại sự kiện được hoãn lại cho đến khi phần tử mất tiêu điểm. "

Vì vậy, tôi nghĩ rằng câu trả lời cho câu hỏi này là, bạn sẽ không nhận được những gì bạn muốn thông qua sự kiện thay đổi, tôi đã cung cấp cho bạn một giải pháp cho vấn đề của bạn nhưng bạn không gửi phản hồi ... Điều khác mà bạn không nên làm là gọi các phương thức js nội tuyến, một khi bạn đang sử dụng jQuery, rất dễ ràng buộc các sự kiện với các phần tử và javascript không phô trương, cách tốt nhất để viết js.

+0

Chỉ cần cố gắng giúp đỡ, tránh một chức năng để làm một điều mà một tài sản của đầu vào và nhận được 3 phiếu giảm giá ?! Rất thú vị .... – tbem

+0

Điều này không trả lời được câu hỏi. Đó là ok để đề xuất các tuyến đường thay thế nhưng bạn nên làm như vậy trong các ý kiến. Nó cũng ok trong câu trả lời nhưng bạn phải trả lời câu hỏi thực tế ("Mã của bạn không hoạt động vì blah blah, bạn có thể sửa nó bằng cách thay đổi foo thành bar, mặc dù cách dễ nhất là sử dụng thuộc tính maxlength thay thế. ") – JJJ

+0

Tuy nhiên, tôi thấy rằng không hoạt động. Đó là lẻ. – jpaires

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