首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JS - Joomla ChronoForms动态改变元素样式

使用JS - Joomla ChronoForms动态改变元素样式
EN

Stack Overflow用户
提问于 2012-12-06 04:31:13
回答 1查看 1.2K关注 0票数 0

请帮我填一张我想做的表格。

我有一个下拉选择,< select >中的所有选项都有ID,例如:一个选项的id=为“hide_me”,另一个选项的id=为“hide_none”。

下面是我为表单准备的JS:

代码语言:javascript
复制
<?php
$script = "window.addEvent('domready', function() {
$('recipe').addEvent('change', function(event) {
  if ( $('recipe')document.getElementById('hide_it').selected === true ) {
     $('hide_me1').setStyle('opacity', '1');
     $('hide_me2').setStyle('opacity', '1');
  }
});
$('recipe').addEvent('change', function(event) {
  if ( $('recipe')document.getElementById('hide_none').selected === true ) {
     $('hide_me1').setStyle('opacity', '0');
     $('hide_me2').setStyle('opacity', '0');
  }
});
});
";
$doc =&JFactory::getDocument();
$doc->addScriptDeclaration( $script );
?>

"recipe“是下拉菜单< select >的名称和ID

现在它给了我一个类似"SyntaxError:意外标识符“的JS错误,有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-06 08:11:17

您生成的js如下所示:

代码语言:javascript
复制
window.addEvent('domready', function() {
    $('recipe').addEvent('change', function(event) {
        if ($('recipe') document.getElementById('hide_it').selected === true) {
            $('hide_me1').setStyle('opacity', '1');
            $('hide_me2').setStyle('opacity', '1');
        }
    });
    $('recipe').addEvent('change', function(event) {
        if ($('recipe') document.getElementById('hide_none').selected === true) {
            $('hide_me1').setStyle('opacity', '0');
            $('hide_me2').setStyle('opacity', '0');
        }
    });
});

如果你使用jslint / jshint或者甚至在jsfiddle中粘贴,然后按下jslint按钮,它会立即报告问题。

但是:

$('recipe') document.getElementById('hide_it').selected === true)没有任何意义。我猜您正在尝试读取id为hide_it的选项,它是recipe的子项?

这样做是错误的,但应该是这样的:

代码语言:javascript
复制
$('recipe').getElement('#hide_it').get('selected'); // pointless as by id alone is faster and id is meant to be unique
document.getElement('#receipe #hide_id').get('selected'); // also pointless like above, alt syntax that allows you to combine selectors.
$('hide_it').get('selected'); // works but also wrong, not how you work with selects.

使用mootools获取select值的正确方法很简单:

代码语言:javascript
复制
$('receip').addEvent('change', function(){
    // within this function, this === $('recipe');
    var opacity = this.get('value') === 'hide_it' ? 1 : 0;
    $$('#hide_me1,#hide_me2').setStyle('opacity', opacity);

    // w/o a reference you could do in a single line:
    $$('#hide_me1,#hide_me2').setStyle('opacity', +(this.get('value') == 'hide_it'));
});

这仍然有些无效,因为它将在每个更改事件中查找2个hide_me els,而这些事件可能是静态的。

您还应该停止使用ids,并基于类来设计此模式,因为ids不能很好地扩展。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13731857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档