两个onchange事件,其中第二个事件获取第一个事件的值

时间:2018-07-11 13:36:15

标签: javascript jquery

我有一个组合框两个文本框,当组合框的值更改时,我查询了一个文本框的数据并将其发送到通过帖子页面。此第二个文本框也会发生同样的情况,但它依赖于第一个文本框的值。更改组合框时,将同时更改这两个文本框。我尝试在第一个文本框上更改第二个文本框,但是在这种情况下什么也没有显示。

我的代码如下:

//Fetch Value for Textbox 1 and post to page

            $('#combobox').change(function(){    
            var cs = $('#irrelevantcombobox').val(); 
            var pj = $('#irrelevantcombobox2').val(); 
            var vd = $('#combobox').val();  
            var data_String;
             data_String = 'cs='+cs+'&pj='+pj+'&vd='+vd;
             $.post('ft-numbervendorpo.php',data_String,function(data){
                   var data = jQuery.parseJSON(data);
                    $('#textbox1').val(data);
                });

                $('#textbox1').val('');
                  $('#textbox2').val('');
            });

//Fetch value for Textbox 2 and post to page

            $('#combobox').change(function(){
            var countpre = $('#textbox2').val();
            var p = $('#irrelevantcombobox').val();
            var c = $('#irrelevantcombobox2').val();
            var v = $('#combobox').val();
            var cp = (parseInt(countpre)+1);
            var data_String;
             data_String = 'p='+p+'&c='+c+'&v='+v+'&cp='+cp;
             $.post('ft-final-v-po-num.php',data_String,function(data){
                   var data = jQuery.parseJSON(data);
                   $('#textbox2').val(data);
                });
            });

当我将文本框2 $('#combobox').change(function(){更改为$('#textbox1').change(function(){时,什么也没出现。当前,使用上面的代码,输出为#####-##-##-NaN。其中#是变化的数字。所需的输出是#####-##-##-('#textbox1' + 1)。我不知道等待功能是否会损害页面的性能,但我认为它并不理想。

1 个答案:

答案 0 :(得分:2)

为什么不将代码放在与第一个相同的事件中的第二个文本框中,只需将其包装在element_to_be_clickable()

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

cap = DesiredCapabilities.INTERNETEXPLORER.copy()
cap['INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS'] = True
driver = webdriver.Ie(capabilities=cap, executable_path=r'C:\Utility\BrowserDrivers\IEDriverServer.exe')
driver.get('https://google.com')
search = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME, 'q')))
search.send_keys("selenium")
search.submit()

或者您可以使用第一个POST请求中的成功选项来触发第二个POST请求

.done

但是,我建议,如果您使用的是jQuery(至少是jQuery 1.5)的足够新的版本(可能正在查看您的代码),则应使用$('#combobox').change(function(){ var cs = $('#irrelevantcombobox').val(); var pj = $('#irrelevantcombobox2').val(); var vd = $('#combobox').val(); var data_String; data_String = 'cs='+cs+'&pj='+pj+'&vd='+vd; $.post('ft-numbervendorpo.php',data_String,function(data){ var data = jQuery.parseJSON(data); $('#textbox1').val(data); }).done(function() { var countpre = $('#textbox2').val(); var p = $('#irrelevantcombobox').val(); var c = $('#irrelevantcombobox2').val(); var v = $('#combobox').val(); var cp = (parseInt(countpre)+1); var data_String; data_String = 'p='+p+'&c='+c+'&v='+v+'&cp='+cp; $.post('ft-final-v-po-num.php',data_String,function(data){ var data = jQuery.parseJSON(data); $('#textbox2').val(data); }); }); $('#textbox1').val(''); $('#textbox2').val(''); }); 结构来确保发布完成后再调用第二个。

作为旁注和个人经验。我在jQuery代码中大量使用了$('#combobox').change(function(){ var cs = $('#irrelevantcombobox').val(); var pj = $('#irrelevantcombobox2').val(); var vd = $('#combobox').val(); var data_String; data_String = 'cs='+cs+'&pj='+pj+'&vd='+vd; $.post('ft-numbervendorpo.php',data_String,function(data){ var data = jQuery.parseJSON(data); $('#textbox1').val(data); var countpre = $('#textbox2').val(); var p = $('#irrelevantcombobox').val(); var c = $('#irrelevantcombobox2').val(); var v = $('#combobox').val(); var cp = (parseInt(countpre)+1); var data_String; data_String = 'p='+p+'&c='+c+'&v='+v+'&cp='+cp; $.post('ft-final-v-po-num.php',data_String,function(data){ var data = jQuery.parseJSON(data); $('#textbox2').val(data); }); }); $('#textbox1').val(''); $('#textbox2').val(''); }); ,但我并没有真正注意到物理上可以看出的性能下降(例如,页面花费101毫秒(使用.done(function(){});)和99毫秒(不使用{ {1}}。