2010-03-01 27 views
10
$('#lPass').focus(function() { 
     if (this.value == this.defaultValue) this.value = ''; 
     $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove(); 
}).blur(function() { 
    alert(1); 
}); 

<input id="lPass" type="text" size="10" value="Password"/> 


onblur không làm việc.
Bất kỳ ý tưởng nào?jQuery onblur không làm việc

Trả lời

24

Sử dụng live thay vì lấy nét và làm mờ

.live() đã bị phản đối. Thay vào đó, hãy sử dụng .on().off().

vì bạn đang thêm các đầu vào trong thời gian chạy, vì vậy nó làm tăng thêm trang với các sự kiện, sống:

Đính kèm một handler cho sự kiện này cho tất cả yếu tố đó phù hợp với hiện tại bộ chọn, hiện tại hoặc trong tương lai.

Ví dụ:

$('#lPass').on('focus', function() { 
    if (this.value == this.defaultValue) this.value = ''; 
    $(this).after('<input type="password" id="lPass" size="10" value="' + this.value + '"/>').remove(); 
}); 


$('#lPass').on('blur', function() { 
    alert(1); 
}); 
+1

.live cho jQuery biết rằng bạn muốn điều này xảy ra với nội dung nào đó cho dù tệp đó nằm trong tệp gốc hay được tạo bởi javascript. Phần đầu tiên trong dấu ngoặc kép trước hàm cho bạn biết loại sự kiện nào bạn đang tìm kiếm (tập trung trong trường hợp đầu tiên, làm mờ trong phần thứ hai). Sau đó, bạn xác định những gì bạn muốn xảy ra. –

+6

.live được xóa khỏi jQuery 1.9+, sử dụng .on thay thế –

2

này cho mã chính xác của bạn:

$('#lPass').live('focus', function() { 
    if (this.value == this.defaultValue) this.value = ''; 
    $(this).after('<input type="password" id="lPass" size="10" value="'+this.value+'"/>').remove(); 
}).live('blur', function() { 
    alert(1); 
}); 
2

Vấn đề đầu tiên tôi thấy là chọn của bạn là một ID của #lPass, tuy nhiên, trong đó bộ chọn bạn cố gắng chèn một thẻ mới với cùng một ID đó. ID phải là duy nhất trên trang. THÌ bạn cố gắng loại bỏ với .remove() - dường như không có ý nghĩa với tôi.

Chỉ cần sử dụng .remove() hoặc sử dụng id mới ...

HOẶC làm rõ những gì bạn muốn làm.

Đối với .blur, chỉ cần sử dụng làm mờ, nhưng ID phải được cố định hoặc sử dụng .live() khi những người khác đề xuất nếu bạn muốn làm mờ trường MỚI mà bạn đã thêm.

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