RJS:检查现有页面元素?

3
我有一个id为“foo”的文本字段,有时存在,有时不存在。如果存在,我想填入某个特定的值。
在Rails 2.2中,如何使用RJS实现此功能?
我尝试了以下代码,但它并不起作用:
if page[:foo]
  page[:foo].value = "bar"
end

我遇到了一个问题:

如果文本框不存在,则会出现 TypeError: Null Value。

请帮忙解决。

2个回答

6

我遇到过很多次这种情况,即如果条件项存在,则需要采取行动。使用page.select可以避免空值错误。

  page.select('#dom_object_id').each do |element|
    element.value = "bar"
  end

我把这段代码放在我的*.js.rjs文件中。当选择器向每个空数组发送时,如果页面上没有与正确ID匹配的DOM对象,则不会返回任何内容,而不是直接按ID选择时会出现的TypeError错误。

1

我认为你无法从RJS中实现。作为一种解决方法,你可以从RJS中调用一个JavaScript方法来检查元素是否存在。

page << "update_foo('#{my_value}');"

Javascript ..

function update_foo(val)
{
  if( $('foo') != undefined )
  {
    $('foo').value = 'bar';
  } 
}

编辑

修复了 Ruby 部分。


运行得非常好(除了没有必要使用“!= undefined”之外)。只要在RJS中没有解决方案,这就是我的解决方案。 - Javier

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