2011-08-24 31 views
1

我有這個類名爲ruButton的telerik按鈕ruBrowse,加載有點晚了進入DOM。 我試圖在頁面加載時更改按鈕的值。如何改變輸入按鈕的值後,它使用jQuery在DOM中加載

下面的代碼在頁面加載時不起作用,但如果連接到另一個按鈕單擊事件,則可以工作。

$(document).ready(
function(){ 
$(".ruButton.ruBrowse").attr('value', 'Browse'); 
} 
); 

該按鈕的我的HTML DOM看起來像這樣。

<INPUT class="ruButton ruBrowse" value=Select type=button> 

如何在頁面加載時使用此功能?

回答

0

你寫道:「我有類名ruButton & ruBrowse的這個telerik按鈕,加載時間稍晚一點到DOM」。

如果在dom的後期加載,訪問它的唯一絕對方法是使用自己提供的回調函數。如果它沒有提供回調,你必須猜測。可以加載其上這樣的計時器:

$(document).ready(function() { 
    setTimeout(function() { 
     $(".ruButton.ruBrowse").attr('value', 'Browse'); 
    }, 400); 
}); 

[上面的例子它試圖改變按鈕之前等待DOM負荷後400毫秒]。

您也可以考慮使用$(window).load(...)來等待dom,但要加載整個頁面。

但是,再次猜測是非常黑客,至少在某些時候可能會出錯,而且對於高質量的代碼來說肯定不夠好。如果庫不提供它自己的回調,請破解庫或使用其他庫。

+0

偉大的工作,但我只是調整它$(document).ready(function(){setTimeout(function(){$(「。ruButton.ruBrowse」 ).attr('value','Browse');},1);}); –

+0

@Nikil好的:這是錯誤的方法;也許如果你向我們展示了你的標記,按鈕是如何加載的,我們可以確定_when_並提供更可靠的解決方案 - 因爲這是一個競爭條件,不應該被倡導(甚至建議,IMO) 。 –

+0

非常感謝Ben的解決方案。 –

0

究竟是如何'後'加載到DOM?它是如何加載的?

這是一個長鏡頭,即使它解決它,也不會是最好的解決辦法,但:

$(document).ready(function() { 
    $(document).change(function() { 
     $(".ruButton .ruBrowse").attr('value', 'Browse'); 
    }); 
}); 

編輯:

看到你更新你的問題,你可以嘗試下面...

改變你的標記,就像這樣:

<input class="ruButton ruBrowse" value="Select" type="button"> 

我將承擔button類型是一個Telerik的東西,並保持原樣。

現在,調整你的jQuery略(我注意到在選擇類名之間沒有空格,這似乎是一個問題):

$(document).ready(function() { 
    $(".ruButton .ruBrowse").attr('value', 'Browse'); 
}); 
+0

類名之間不應該有空格。選擇器「.X.Y」(不帶空格)表示「所有元素都帶* *類X和Y」。選擇符「.X .Y」(帶空格)表示「具有類Y的元素,它具有類X的父元素」,在此上下文中完全錯誤。缺乏空間是故意的。 –

+0

另外,我仍然認爲這是行不通的。 Web瀏覽器足夠聰明,可以解釋HTML而不用引號。我非常確定這只是運行它自己的dom.ready的telerik庫,如果是這樣的話,1ms超時是一種抗種族競爭的方法。 –

+0

@Ben Lee:關於選擇器的有趣事實,謝謝分享。我知道你已經承認超時方法不是_race-proof_,所以會忽略該評論。 ;) –

-2

您也可以使用此

$(document).ready( $(".ruButton.ruBrowse").val('Browse'); );

+1

請在發佈到本網站之前嘗試一次您的結局 –

0

我只是想到了另一種解決方案,即使你不知道按鈕加載需要多長時間,也是堅實的解決方案(結果顯示1毫秒定時器對你來說可能只是一個猜測)。你只需要在運行一個定時器,過來檢查,如果他們都被加載,就像這樣:

var wait_for_telerik_buttons = function() { 
    if ($("input[type='button']").length === $('ruButton.ruBrowse').length) { 
     $(".ruButton.ruBrowse").attr('value', 'Browse'); 
    } else { 
     setTimeout(wait_for_telerik_buttons, 100); 
    } 
}; 
setTimeout(wait_for_telerik_buttons, 20); 

不能說這是最有效的方法,但是如果你的第一個猜測是好(20毫秒上面的例子),那麼它通常會在第一時間捕捉它。但是,如果在任何特定情況下猜測都很糟糕,則會有一個100毫秒的計時器循環。比賽條件解決了。

0

Telerik文件上傳按鈕值可以通過使用Telerik的本地化支持本身來改變。 在我意識到這一點之前,我不得不使用JavaScript來破解。

<telerik:RadUpload ID="RadUpload" runat="server" TargetFolder="..\..\Upload" MaxFileInputsCount="1"> 
       <Localization Select="Browse" /> 
      </telerik:RadUpload> 

Locatlization Select = Browse以正確的方式完成工作。如果這個選項不可用,Javascript的解決方法可以幫助你。

相關問題