我使用的方法来接受的元素的ID的一部分,并且使用它来确定我需要传递给一个方法,其URL路径。在我的情况下,这是用来通过点击一个按钮事件可以连接到多个网格中的任何一个,所以我需要知道我是为了知道重新加载什么数据,格:使用eval将变量分配给方法。我应该怎么做呢?
jQuery('.reset').click(function(e) {
e.preventDefault();
jQuery('#' + grid_id + '_mnf').toggle();
jQuery('#' + grid_id + '_mnfall > .instance').each(function() {
jQuery(this).removeAttr("checked");
});
var url = eval(grid_id + '_url');
jQuery('#foo').setGridParam({url:url}).trigger('reloadGrid');
});
可能的网址被定义为变量,所以我有类似:
var foo_url = url_path + '?input=moduleone¶m=1';
var bar_url = url_path + '?input=moduleone¶m=2';
这意味着在URL值以上setGridParam方法将这些VARS之一。如果我只是这样做:
var url = grid_id + '_url'; //note I'm not using eval here
传递给setGridParam的值将不起作用。
如果我不使用eval
像我这样做上述网址将无法正常工作。为什么?这里发生了什么?因为“eval是邪恶的”,我还应该做什么?
在我的脑海里,不使用eval,我传递的网址,如:
jQuery('#foo').setGridParam({url:foo_url}).trigger('reloadGrid');
但这未能如此明显的eval这里需要?
因为我相信这是过于死板,笨重的方式来做到这一点,如果有人想看到它(也许建议如何,我这样做不对?),这里是我怎么得到这grid_id
:
// ex. id='foo_filter'
var source = $(this).parent().parent().attr('id').split('_');
var parsed_source = source.splice(1, source.length + 1);
grid_id_portion = '';
for (var i = 0; i < parsed_source.length; i++) {
grid_id += parsed_source[i];
if(i < parsed_source.length - 1){
grid_id += '_';
}
}
一些问题,我看......我必须定义的URL为每个网格的变量。这是非常不灵活的,是吗?这些网址非常相似,因此定义一些网址似乎效率不高。另外,如果某人编写了一段特殊的代码来插入我分开传递给eval
的ID。这可能是个坏消息,是的?任何建议如何改善这将不胜感激。
需要真正看到完整的点击代码,并在那里你定义grid_id – Alex
@Alex - 我加了一点,这是不存在的。 grid_id定义代码已经在那里...在底部。 – Lothar
我想可以用更简单的方式实现所有你需要的东西。问题是我不完全明白你的所作所为。网页上有两个(或更多)网格吗?页面上有多少个“重置”类按钮?元素在哪里......'_ mnf','_mnfall> .instance'? HTML标记将非常有帮助。 – Oleg