2013-04-15 75 views
2

我想從服務器端JS傳遞一個jQuery命令(以字符串的形式)到客戶端js。這使我可以從服務器端修改客戶端的DOM東西。jQuery執行字符串作爲函數

功能:

$("textArea").attr("disabled","true"); 

我想要做什麼:

$['$("textArea").attr("disabled","true")'](); 

拋出一個錯誤。思考?

+1

_This允許我從服務器端修改客戶端DOM的東西。這不是正確的方法。 – undefined

+1

附近的副本http://stackoverflow.com/questions/15936011/calling-a-jquery-method-named-in-variable/15936215#15936215但像undefined說,這只是嗅到錯誤... – Alnitak

+0

這是一個javascript聊天室。禁用html/dom元素必須在客戶端完成。試圖阻止任何聊天室客人擺弄他們的瀏覽器元素檢查員 - 即使他們「靜音」也可以讓他們發帖 –

回答

8

你可以使用eval函數在客戶端:

這將立即執行你的javascript:

eval('$("textArea").attr("disabled","true")'); 

但是,正如在評論中說,要小心你做什麼的這是一個非常粗糙的方法。

此外,在安全方面,你真的不獲得任何東西,因爲人們仍然可以打開的開發工具,並刪除disabled屬性

+0

立即嘗試。是的,我已經意識到了。 textarea的禁用設置只有一個設置。 Serverside,它們的名字被放入無法發佈的用戶數組中。我只需要一些安全+指標給用戶,確實已經被靜音了。順便說一句,不是唯一的視覺,表明他們已被靜音。但這是一個明顯的例子。 –

+0

完美工作,ty –

2

或者,你可以打破你的字符串成多個字符串從傳遞服務器。例如:

// variables passed from the server 
selector = 'textArea'; 
method = 'attr'; 
arguments = ['disabled', 'true']; 

然後,你可以評價它是這樣的:

$(selector)[method](arguments[0], arguments[1]); 

當然,如果參數的數目必須是動態的,它會得到一個有點棘手。