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

标签 javascript jquery events dom triggers

我使用 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 - 滚动动画不适用于元素

c# - 从母版页调用函数

javascript - Select2 4.0 - 创建后推送新条目

javascript - 获取元素的父div

jquery - 如何限制html下拉选项列表的宽度

jquery ui Accordion ajax 麻烦

jquery - 调试 jQuery 插件

java - 在 JScrollPane 上设置滚动条

javascript - 当生成的 HTML 看起来找到时,为什么 Enzyme 找不到我的元素?

javascript parentnode.id 没有按我预期的方式工作