2010-09-16 41 views
7

我正在使用jQuery顯示模態對話框。該對話框上有一個textarea控件。但在提交此對話框時,出於某種原因,此textarea的值無法被jQuery識別:它始終爲空。 這適用於其他瀏覽器。我把警報顯示的價值,但它看起來空白。在這方面有誰能幫助我?JQuery val()不適用於Opera中的textarea

控制:

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

jQuery代碼,其使用該值:

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

$('#txtDescription').val()自帶空白但$('#txtGroupName').val()被正確地讀出,因爲它是一個輸入域。這個問題

還有一個發現:

當我把警報在我更新功能填充在頁面加載控制值後,該警報可以正確地顯示現有的值。但它只顯示現有值。它在提交模態框後不顯示編輯的值。

+0

您正在使用哪種瀏覽器/平臺? – 2010-09-16 06:02:43

+1

我使用的Opera 10.53和我的操作系統是Windows 7. – 2010-09-16 06:13:10

+0

我不一定能幫助Windows部分,但我會在我的Ubuntu盒子上安裝Opera,看看我能不能提出任何有用的東西。 – 2010-09-16 06:18:17

回答

3

解決這個使用這個文本區域中,在腳本的結束

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

放。 我爲我的英語

+0

謝謝@Javier ..!這是正確的做法.. – 2010-11-11 09:42:20

1

您是否試過.attr("text").attr("value")?我無法測試這個,但這對我來說似乎合乎邏輯。

如果它不,然後讓我知道,我會刪除這個答案。

+0

文本給出'未定義',值給出空白 – 2010-09-16 06:07:43

+0

我已更新我的問題與最新發現.. – 2010-09-16 06:46:37

0

Textarea沒有值屬性。嘗試使用

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

不幸的是文本()也不起作用 – 2010-09-16 05:45:30

+3

你是對的它沒有在HTML中的值屬性,但我很確定jQuery的'val()'將回傳文本節點。 – alex 2010-09-16 05:49:19

+0

我已更新我的問題,最新發現.. – 2010-09-16 06:46:07

0

我發現,在Chrome 6.0.472.59,火狐3.6.9和Opera 10.62,所有在Ubuntu 10.04中,textarea確實有/使用.val()屬性。關於一些其他瀏覽器不可能或不可能的機會,我把這個jsbin demo放在一起。不過,我使用if/else塊來涵蓋兩種方法。以防萬一......

$(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; 
    } 
    ); 
    } 
); 

這個問題#1(jQuery get textarea text)也表明,它應該是可能的,可靠的,因爲做的第一評論者的API頁面上Val(),在jQuery.com

請注意,關於Opera:jsBin演示僅在我停用開發者工具(無論出於何種原因)的情況下才有效。這可能是值得關閉Dragonfly(如果它正在運行),然後刷新演示頁面(或顯然,你自己的測試頁),看看它是否有所作爲。無論哪種方式,總是有必要清理緩存以確保正在使用最新版本的文件。

+1

感謝您的方法。但事情是,文本()以及val()在這裏不起作用。 – 2010-09-16 05:54:55

+0

@Anil:你確定*它是'$('textarea').val();'那個不工作?我意識到這不是我應該參考的最經典的地方,但是對於'.val()'函數/方法,http://api.jquery.com/val/上的一位評論者建議*應該*工作(在Ubuntu上使用Chrome和FF的情況下也是如此)。 – 2010-09-16 06:08:36

+0

我用$(「#txtDescription」)。val(),因爲那是我的控件的id。但不工作。你想讓我使用$('textarea')嗎?我認爲'textarea'應該被我的控件ID所替代。 – 2010-09-16 06:11:44

0

在歌劇用於獲取值或一個textarea只能:

的document.getElementById( 「描述」)值。

奇怪的是,$(「textara#說明」)。VAL(「」)的作品(設置方法)

+0

同樣在Firefox中,我需要使用'$(「textarea#myelement」).val(「」);'不知道爲什麼。 – Dex 2011-04-01 09:13:32

1

可能所遇到的在博客中提到的關於歌劇很不起眼的錯誤sitepatching博客1作爲「PATCH-287,Hack使腳本在blog.ebuddy.com的TEXTAREA中看到輸入的值,Opera無法從先前隱藏的textarea讀取正確的值」。

雖然沒有看到完整的代碼,但我有點不情願推薦解決方法。 jQuery中

3

VAL()和text()正常工作,但設置文本域的值之後,你需要 重新呈現textarea的,你可以這樣的方式

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

你好來自俄羅斯爲此設置CSS屬性。對不起,我的英語=)

1

好日子讓人惋惜,

我也有同樣的問題在Opera 10.63和Windows。

Javier Canizalez建議的破解工作,但只限於我不重複使用對話框(和textarea)。然而,這種情況並非如此。隨着他的黑客,頁面加載後,我點擊一個項目,我顯示一個以前隱藏(顯示:無)與textarea裏面的對話框。一切工作正常(與黑客)。關閉對話框/ * $(對話框).hide()); * /通過再次點擊另一個項目再次使用它,黑客不再工作了,javascript/jQuery不再獲得新的類型值,直到完整頁面重新加載。

我在上面給出的鏈接之一發現,歌劇的傢伙已經解決了這個問題:PATCH-287 但它似乎並不固定:)我寫了一個問題,並會看到他們是否會回覆: opera patch-287

有人設法解決這個問題嗎?

謝謝,最好的問候。

0

我使用此解決方法:


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

選擇<textarea>通過屬性名稱,而不是ID。

<textarea id="txtDescription" name="txtDescription"></textarea> 
<script> 
    jQuery("textarea[name='txtDescription']").val(); 
</script> 
相關問題