Haw*_*awk 6 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);
});
Run Code Online (Sandbox Code Playgroud)
现在,在"lang"选择菜单更改时触发此代码.我以编程方式打开窗口,window.open并设法使用将数据填充到窗口字段中Window.executeScript().例如,这对我有用:
loginWindow.executeScript({
code: "jQuery('input#username').val('10500050')"
});
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试按照相同的逻辑更改selectMenu中所选项目的同一窗口中的'lang'时,我失败了.
尝试
我尝试了以下几行executeScript;
code: "$('#lang').val('ms')"
code: "jQuery('#lang option[value=ms]').prop('selected', true)"
code: "jQuery('#lang').selectmenu('value', 'ms')"
Run Code Online (Sandbox Code Playgroud)
用这些在下一个executeScript触发变化
code: "$('#lang').trigger('change')"
code: "$('#lang').selectmenu('refresh', true)"
code: "jQuery('#lang').selectmenu('refresh')"
code: "jQuery('#lang').selectmenu('change')"
code: "$('#lang').change()"
Run Code Online (Sandbox Code Playgroud)
他们都没有帮助.我不确定我是否应将它们合二为一executeScript.我不知道如何去做.打开的窗口来自不同的域.
我在这里错过了什么吗?
开场白方的整个代码如下:
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();
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
前两个executeScript工作正常.但最后两个(selectMenu部分)不起作用.什么都没发生.
UPDATE
将此代码添加到窗口本身时,它可以工作,并且选择框值会更改:
jQuery("#lang option[value='zh-TW']").attr("selected","selected");
jQuery('#lang').change();
Run Code Online (Sandbox Code Playgroud)
但是,当我executeScript在父窗口(开启者)中添加它时,它不起作用!
由于当我将代码直接粘贴到子窗口中时代码可以工作jQuery(document).ready(function(),因此我认为它应该使用executeScript. 经过多次反复试验,以下代码对我有用:
loginWindow.executeScript(
{
code: "jQuery('#lang option[value=zh-TW]').attr('selected','selected'), jQuery('#lang').change()"
});
Run Code Online (Sandbox Code Playgroud)
这与我在问题的“更新”部分中提到的代码相同,除了单引号和双引号的区别。在这里使用executeScript,我必须操纵以仅使用双引号来括住整个注入的代码,其余的我使用单引号。
上面的代码,使用executeScript父窗口(opener)中的方法更改子窗口选择框中选定的选项。
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |