草庐IT

javascript - 在 AppBrowser 中以编程方式更改 selectMenu 选项

coder 2025-01-16 原文

我使用 javascript window.open() 打开一个窗口

打开的窗口有以下代码:

jQuery(document).ready(function(){
    jQuery("#lang").change(function(){
        var lname = jQuery(this).val().split("-");
        window.location = '<?php echo JURI::root();?>index.php?lang='+lname[0];
        alert(lname[0]);
        alert('lang '+lang);
    });

现在这段代码会在“lang”选择菜单发生变化时触发。我使用 window.open 以编程方式打开窗口,并设法使用 Window.executeScript() 将数据填充到窗口字段中。例如,这对我有用:

loginWindow.executeScript({
   code: "jQuery('input#username').val('10500050')"
});

但是,当我尝试按照相同的逻辑为同一窗口更改 selectMenu 中名为“lang”的所选项目时,我失败了。

尝试

我在 executeScript 中尝试了以下所有行;

code: "$('#lang').val('ms')"
code: "jQuery('#lang option[value=ms]').prop('selected', true)"
code: "jQuery('#lang').selectmenu('value', 'ms')"

在接下来的 executeScript 中使用这些来触发更改

code: "$('#lang').trigger('change')"
code: "$('#lang').selectmenu('refresh', true)"
code: "jQuery('#lang').selectmenu('refresh')"
code: "jQuery('#lang').selectmenu('change')"
code: "$('#lang').change()"

他们都没有帮助。我不确定是否应该将它们合并到一个 executeScript 中。我不知道如何去做。打开的窗口来自不同的域。

我是不是漏掉了什么?

opener端的全部代码如下:

loginWindow.addEventListener( 'loadstop', function() {
    alert('test');
    var loop = setInterval(function() {
       loginWindow.executeScript({
          code: "jQuery('input#username').val('10500050')"
          },
          function( values ) {
             var give = values[ 0 ];
             if ( give ) {
                clearInterval( loop );
                giveMeUsername(); 
              }
          });

        loginWindow.executeScript({
           code: "  jQuery('input#name').val('10500050')"
            },
            function( values ) {
               var give = values[ 0 ];
                  if ( give ) {
                     clearInterval( loop );
                     giveMeUsername(); 
                   }
             });

        loginWindow.executeScript({
           //code: "$('#lang').val('zh')"
           //code: "jQuery('#lang option[value=ms]').prop('selected', true)"
           code: "jQuery('#lang').selectmenu('value', 'ms')"
           //code: "localStorage.setItem( 'lan', 'ms' )"
           },
           function( values ) {
              var give = values[ 0 ];
              if ( give ) {
                 clearInterval( loop );
                 giveMeUsername(); 
               }
            });

      loginWindow.executeScript({
         //code: "$('#lang').trigger('change')"
         //code: "$('#lang').selectmenu('refresh', true)"
         //code: "jQuery('#lang').selectmenu('refresh')"
         //code: "jQuery('#lang').selectmenu('change')"
         code: "$('#lang').change()"
         },
         function( values ) {
            var give = values[ 0 ];
            if ( give ) {
               clearInterval( loop );
               giveMeUsername(); 
             }
           });                        
     });
});

前两个 executeScript 工作正常。但最后两个(selectMenu 部分)不起作用。什么都没有发生。

更新

当将此代码添加到窗口本身时,它起作用并且选择框值被更改:

jQuery("#lang option[value='zh-TW']").attr("selected","selected");
jQuery('#lang').change();

但是,当我在父窗口(opener)的 executeScript 中添加它时,它不起作用!

最佳答案

当我将代码直接粘贴到 jQuery(document).ready(function() 内的子窗口中时代码可以工作,我假设它应该使用 executeScript<>. 经过多次反复试验,以下代码对我有效:

                    loginWindow.executeScript(
                        {
                            code: "jQuery('#lang option[value=zh-TW]').attr('selected','selected'), jQuery('#lang').change()"                               
                        });

这是我在问题的“更新”部分提到的相同代码,除了单引号和双引号的区别。在这里使用 executeScript,我不得不使用双引号来包围整个注入(inject)的代码,其余的我使用单引号。

上面的代码,在父窗口(opener)中使用executeScript方法更改子窗口选择框中选中的选项。

关于javascript - 在 AppBrowser 中以编程方式更改 selectMenu 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30069706/

有关javascript - 在 AppBrowser 中以编程方式更改 selectMenu 选项的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  5. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  6. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  7. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  8. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  9. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  10. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

随机推荐