jjzjj

javascript - 我无法让 onChange 触发 dijit.form.Select

coder 2024-12-18 原文

我似乎无法将 onchange 事件正确附加到 dijit.form.Select 小部件。但是,我是 Web 开发的新手,所以我可能会做一些完全愚蠢的事情(尽管,据我所知(并且我已经阅读了我能找到的所有文档)我不是)。我确保 body 类与 dojo 主题相匹配,我为我使用的所有小部件(和 dojo.parser)执行 dojo.require(),但仍然是 nada。我使用的代码是:

dojo.addOnLoad(function () {
    var _query = dojo.query('.toggle');
    for (var i in  _query) {
        dojo.connect(_query[i], 'onchange', function (ev) {
            console.log(ev + ' fired onchange');
        });
    }
});

如有任何帮助,我们将不胜感激。

补充:在深入了解 dijit 如何呈现小部件后,我发现当我将 dojoType='dijit.form.Select' 属性值对添加到我的 html 元素(以声明方式执行此操作)时,dijit 实际上呈现单行两列表。该表的第一个元素是一个跨度(具有类 dijitSelectLabel),我假设它只显示选定的(或默认的)元素。它的第二个元素似乎是一个呈现为向下箭头的按钮,可切换菜单项的显示以响应某些 DOM 事件。此外(我认为这非常漂亮),dijit 实际上不会将选择选项放置在 DOM 树中,直到其中一个事件被触发。我在新页面加载后(在我单击任何内容之前)立即查看了 Firebug 中的 HTML,并且找不到第二个选项。然后,一旦我单击箭头按钮,就会出现一个 dijit.Menu 小部件,dijit 会将一个 dijit.Menu 粘贴到 body 节点的末尾;在我单击其他地方后,Menu 小部件仍然是 body 的 lastChild,现在它只是隐藏并且没有附加到表单。选择小部件。

如果我只想根据用户选择的项目在 DOM 树中放置一个不同的 dijit.form 小部件,真的会这么复杂吗?

结论: 原来是大小写问题。

dojo.connect(widget_obj, 'onChange', function_obj);
有效,而

dojo.connect(widget_obj, 'onchange', function_obj);
没有。

所以我是对的,我完全是愚蠢的。我假设因为全小写版本在将 html 标记作为属性放入其中时有效,所以 Dojo 会同样对待它。这是有道理的,因为 dijit.form.Select 没有 .onchange 属性,但有一个 .onChange 属性。 (我最终坚持使用 .Select 而不是 .FilteringSelect,因为我不会给我的用户留下任何他们可以输入内容的印象。)所以,我给你们中的哪一个答案(因为你们俩在你的帖子中有 onChange,我想我只是太缺乏经验,无法意识到这个案例很重要)?

最佳答案

对于通过网络搜索找到此页面的任何其他人,您可能犯了与我相同的错误.. 复制粘贴您的标记,使每个标记都具有相同的“值”。

例如

<select dojoType='dijit.form.Select' onChange="fn">
<option value='foo'>Foo 1</option>
<option value='foo'>Foo 2</option>
<option value='foo'>Foo 3</option>
</select>

fn() 永远不会被调用,因为更改处理程序代码会根据先前选择的值检查新值并且不会触发 onChange 除非它发生更改。

关于javascript - 我无法让 onChange 触发 dijit.form.Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561111/

有关javascript - 我无法让 onChange 触发 dijit.form.Select的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  5. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  6. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  7. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  8. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  9. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  10. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

随机推荐