2015-05-06 13 views
6

tôi mở một cửa sổ sử dụng javascript window.open()Thay đổi Chọn Menu tùy chọn lập trình trong con inAppBrowser

Cửa sổ mở ra có đoạn mã sau:

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); 
    }); 

Bây giờ mã này được kích hoạt khi 'lang' chọn thay đổi thực đơn. Tôi mở cửa sổ lập trình bằng cách sử dụng window.open và tôi đã quản lý dữ liệu vào các trường cửa sổ bằng cách sử dụng Window.executeScript(). Ví dụ: điều này phù hợp với tôi:

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

Tuy nhiên, khi tôi cố gắng tuân theo cùng một logic để thay đổi mục đã chọn trong chọnMenu gọi là 'lang' cho cùng một cửa sổ, tôi thất bại.

Nỗ lực

Tôi đã thử tất cả các dòng sau trong executeScript;

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

cập đến ở bên cạnh executeScript để kích hoạt sự thay đổi

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

Không ai trong số họ giúp đỡ. Tôi không chắc liệu tôi có nên kết hợp chúng trong một số executeScript hay không. Tôi không biết làm thế nào để làm điều đó. Cửa sổ mở ra từ miền khác.

Tôi có thiếu gì đó ở đây không?

Toàn bộ mã trên mặt mở như sau:

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(); 
      } 
      });       
    }); 
}); 

Hai executeScript tốt công việc đầu tiên. Nhưng cuối cùng hai (phần SelectMenu) không hoạt động. Không có gì xảy ra.

CẬP NHẬT

Khi thêm mã này vào cửa sổ chính nó, nó hoạt động và chọn giá trị hộp được thay đổi:

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

Tuy nhiên, khi tôi thêm nó bên executeScript trong cửa sổ cha mẹ (mở), nó không hoạt động!

+0

Bạn có thể đặt tất cả các cuộc gọi thực thi thos cùng nhau bằng cách tách các lệnh bằng dấu chấm phẩy. Tôi không nghĩ rằng điều này sẽ giải quyết vấn đề anyway. – jlreymendez

+1

@jlreymendez bán kết tràng không có tác dụng đối với tôi, nhưng dấu phẩy đã hoạt động. Cảm ơn bạn đã chỉ ra khả năng – Hawk

Trả lời

1

Khi mã hoạt động khi tôi dán trực tiếp vào cửa sổ con bên trong jQuery(document).ready(function(), tôi cho rằng mã sẽ hoạt động từ cửa sổ chính sử dụng executeScript. Sau nhiều thí nghiệm thử và sai, đoạn mã sau làm việc cho tôi:

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

Đó là cùng mã tôi đã đề cập trong "Update" một phần của câu hỏi của tôi, ngoại trừ sự khác biệt trong dấu nháy đơn và nháy kép. Ở đây sử dụng executeScript, tôi đã phải thao tác để sử dụng trích dẫn kép chỉ để kèm theo toàn bộ mã được tiêm, phần còn lại tôi sử dụng dấu nháy đơn.

Đoạn mã trên, thay đổi tùy chọn được chọn trong hộp chọn trong cửa sổ con bằng cách sử dụng phương thức executeScript trong cửa sổ chính (mở).

Các vấn đề liên quan