2010-09-16 30 views
7

Tôi đang hiển thị một hộp thoại phương thức bằng cách sử dụng jQuery. Hộp thoại này có điều khiển textarea trên đó. Nhưng trong khi gửi hộp thoại này, giá trị của số textarea này không được jQuery công nhận vì một số lý do: nó luôn bị trống. Tính năng này hoạt động hoàn hảo trong các trình duyệt khác. Tôi đặt cảnh báo để hiển thị giá trị nhưng có vẻ trống. Ai có thể giúp tôi trong vấn đề này?JQuery val() không hoạt động cho textarea trong Opera

Controls:

<input type="text" id="txtGroupName"/> 
<textarea rows="3" cols="30" id="txtDescription"></textarea> 

mã jQuery mà sử dụng giá trị này:

var postData = new Object(); 
postData.GroupName = $('#txtGroupName').val(); 
postData.Description = $('#txtDescription').val(); 

$('#txtDescription').val() đến trống nhưng $('#txtGroupName').val() được đọc một cách chính xác vì nó là một lĩnh vực đầu vào.

hơn Một phát hiện về vấn đề này:

Khi tôi đặt cảnh báo trong chức năng cập nhật của tôi sau khi Populating giá trị kiểm soát trên tải trang, cảnh báo này sẽ hiển thị các giá trị hiện đúng cách. Nhưng nó chỉ hiển thị giá trị hiện tại. Nó không hiển thị giá trị đã chỉnh sửa sau khi gửi hộp phương thức.

+0

Bạn đang sử dụng trình duyệt/nền tảng nào? –

+1

Tôi đang sử dụng Opera 10.53 và hệ điều hành của tôi là Windows 7. –

+0

Tôi không nhất thiết phải trợ giúp với phần Windows, nhưng tôi sẽ cài đặt Opera trên hộp Ubuntu của tôi và xem tôi có thể tìm ra bất kỳ thứ gì hữu ích không. –

Trả lời

3

tôi sửa lỗi này sử dụng này trong textarea

$("#descripcion").keydown(function(){ 
    $("#descripcion").css("display","block"); 
}); 

đặt ở cuối của kịch bản. Tôi xin lỗi vì tiếng

+0

Cảm ơn @Javier ..! đây là cách tiếp cận đúng .. –

1

Bạn đã thử .attr("text") hoặc .attr("value")? Tôi không thể kiểm tra điều này nhưng điều này có vẻ hợp lý với tôi.

Nếu nó không cho tôi biết và tôi sẽ xóa câu trả lời này.

+0

văn bản cung cấp 'không xác định' và giá trị cho trống –

+0

Tôi đã cập nhật câu hỏi của mình với các phát hiện mới nhất .. –

0

Textarea không có thuộc tính giá trị. Cố gắng sử dụng

$('#txtDescription').text(); 
+1

văn bản không may() cũng không hoạt động –

+3

Bạn nói đúng là nó không có thuộc tính giá trị trong HTML, nhưng tôi khá chắc chắn 'val()' của jQuery sẽ đưa trở lại nút văn bản. – alex

+0

Tôi đã cập nhật câu hỏi của mình với những phát hiện mới nhất .. –

0

tôi đã tìm thấy, trong 6.0.472.59 Chrome, Firefox 3.6.9 và Opera 10.62, tất cả trên Ubuntu 10.04, rằng textarea không có/sử dụng thuộc tính .val(). Trên cơ hội mà một số trình duyệt khác không, hoặc có thể không, tôi đặt cùng nhau jsbin demo này. Mặc dù vậy, tôi đã sử dụng khối if/else để trang trải cả hai cách tiếp cận. Chỉ trong trường hợp ...

$(document).ready(
    function() { 
    $('form').submit(
    function() { 

     if ($('textarea').val()) { 
     var means = 'val()', 
     textValue = $('textarea').val(); 
     } 
     else { 
     var means = 'text()', 
     textValue = $('textarea').text(); 
     } 

     alert('(' + means + ') ' + textValue); 

     return false; 
    } 
    ); 
    } 
); 

Câu hỏi này Stackoverflow (jQuery get textarea text) cũng cho thấy rằng chúng ta có thể và đáng tin cậy, cũng như các commenter đầu tiên trên trang API cho Val(), tại jQuery.com.

Lưu ý, liên quan đến Opera: bản trình diễn jsBin chỉ hoạt động khi tôi đã hủy kích hoạt công cụ nhà phát triển (vì bất kỳ lý do gì). Nó có thể là giá trị tắt Dragonfly (nếu nó đang chạy), và sau đó làm mới trang demo (hoặc, rõ ràng là, trang thử nghiệm của riêng bạn) để xem nó có tạo sự khác biệt hay không. Dù bằng cách nào, nó luôn luôn có giá trị thanh toán bù trừ bộ nhớ cache của bạn để đảm bảo phiên bản cập nhật nhất của các tập tin đang được sử dụng.

+1

cảm ơn vì cách tiếp cận này. Nhưng vấn đề là văn bản() cũng như val() không hoạt động ở đây. –

+0

@Anil: bạn chắc chắn * rằng đó là '$ ('textarea'). Val();' bit không hoạt động?Tôi nhận ra rằng đó không phải là nơi kinh điển nhất mà tôi nên tham khảo, nhưng một người bình luận trên http://api.jquery.com/val/ cho hàm '/val()'/phương thức gợi ý rằng * nên * làm việc (rõ ràng là vậy, trong trường hợp Chrome và FF trên Ubuntu). –

+0

Tôi đã sử dụng $ ("# txtDescription"). Val() vì đó là id của kiểm soát của tôi. nhưng không hoạt động. Bạn có muốn tôi sử dụng $ ('textarea') thay thế không? Tôi giả định rằng 'textarea' nên được thay thế bởi id của kiểm soát của tôi. –

0

Trong opera để nhận được giá trị hoặc một textarea chỉ hoạt động:

("mô tả") giá trị document.getElementById;.

lạ là $ ("textara # description"). Val ("") hoạt động (phương pháp quy định)

+0

Tương tự trong Firefox, tôi cần sử dụng '$ (" textarea # myelement "). Val (" ");' Không biết tại sao. – Dex

1

bạn thể đã đi qua một lỗi rất khó hiểu được đề cập trong một bài đăng blog trên Opera sitepatching blog 1 là "PATCH-287, Hack để làm cho tập lệnh thấy giá trị đã nhập trong TEXTAREA trên blog.ebuddy.com. Opera không đọc được giá trị chính xác từ văn bản ẩn trước đó".

Tôi hơi miễn cưỡng khi khôi phục các giải pháp thay thế mà không thấy mã đầy đủ.

3

val() và văn bản() trong jquery hoạt động chính xác, nhưng sau khi cài đặt giá trị của textarea bạn cần phải textarea rerender, bạn có thể làm tài sản css thiết lập này theo cách như vậy

if ($.browser.opera) 
    $('textarea').val(someText).css({display:block}); 
else 
    $('textarea').val(someText); 

Lời chào từ Nga. Xin lỗi vì tiếng anh của tôi =)

1

người ngày tốt của tôi,

Tôi cũng có cùng một vấn đề với Opera 10.63 và Windows.

Bản hack do Javier Canizalez đề xuất hoạt động, nhưng chỉ miễn là tôi không sử dụng lại hộp thoại (và văn bản) một lần nữa. Tuy nhiên, đây không phải là trường hợp. Với hack của mình, sau khi trang được tải và tôi nhấp vào một mục, tôi hiển thị một hộp thoại mà trước đây đã được ẩn (hiển thị: không có) với textarea bên trong nó. Tất cả mọi thứ hoạt động tốt lần đầu tiên (với hack). Sau khi đóng hộp thoại/* $ (hộp thoại) .hide()); */và tái sử dụng lại bằng cách nhấp vào một mục khác, bản hack không hoạt động nữa và javascript/jQuery không nhận được giá trị đã nhập mới nữa cho đến khi tải lại toàn bộ trang.

Tôi tìm thấy tại một trong các liên kết được nêu ở trên là những người ở opera đã khắc phục sự cố đó: PATCH-287 Nhưng dường như không cố định với tôi :) Tôi đã viết câu hỏi ở đó và sẽ xem họ có trả lời không : opera patch-287

Có ai đó đã giải quyết được vấn đề này không?

Cảm ơn bạn và kính thư.

0

tôi sử dụng workaround này:


if (window.opera) 
{ 
    document.addEventListener('focus', function(event){ 
    if (event.target instanceof HTMLTextAreaElement) 
    { 
     event.target.contentEditable = true; 
     event.target.contentEditable = false; 
    } 
    }, true); 
} 
0

Chọn <textarea> theo tên thuộc tính thay vì id.

<textarea id="txtDescription" name="txtDescription"></textarea> 
<script> 
    jQuery("textarea[name='txtDescription']").val(); 
</script> 
Các vấn đề liên quan