jQuery执行字符串作为函数

3
我希望能够从服务器端的JS向客户端JS传递一个jQuery命令(以字符串形式)。这使我可以从服务器端修改客户端DOM内容。
函数:
$("textArea").attr("disabled","true");

我想要做什么:
$['$("textArea").attr("disabled","true")']();

抛出一个错误。有什么想法吗?


1
这让我能够从服务器端修改客户端DOM内容。但这并不是正确的方式。 - Ram
1
与http://stackoverflow.com/questions/15936011/calling-a-jquery-method-named-in-variable/15936215#15936215几乎重复,但像undefined所说的那样,这只是一种错误的做法... - Alnitak
这是一个 JavaScript 聊天室。禁用 HTML / DOM 元素必须在客户端完成。试图防止任何聊天室访客通过浏览器元素检查器进行调整 - 这可能会使他们发布帖子,即使他们被“静音”。 - Shazboticus S Shazbot
1
@ShazboticusSShazbot 你不能依赖JS黑客来实现安全。用户总会找到绕过它们的方法。 - Alnitak
дёҖдёӘjQueryзҡ„и§ЈеҶіж–№жЎҲе°ҶжҳҜjQuery.globalEval()http://api.jquery.com/jquery.globaleval/ - Ari
显示剩余2条评论
2个回答

11

你可以在客户端使用eval函数:

这将立即执行你的JavaScript代码:

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

但是,正如评论中所说,要小心你所做的事情,因为这是一个非常粗糙的方法。

此外,在安全方面,你并没有真正获得任何东西,因为有人仍然可以打开开发工具并删除禁用属性。


现在正在尝试。是的,我已经意识到了这一点。textarea的禁用设置只是一个设置。在服务器端,他们的名称将被放入一个无法发布帖子的用户数组中。我只需要一些安全性并向用户指示确实他们已被静音的指示。顺便说一句,并不是唯一表明他们已被静音的可视化界面。但这是显而易见的一种。 - Shazboticus S Shazbot

2

另外一种方法是,您可以将字符串分成多个从服务器传递的字符串。例如:

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

那么您可以这样评估它:
$(selector)[method](arguments[0], arguments[1]);

当然,如果参数数量需要动态控制,情况会变得有些棘手。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接