【问题标题】:The OnChange function do not work after having disabled the SelectOnChange 功能在禁用 Select 后不起作用
【发布时间】:2015-07-06 12:17:25
【问题描述】:

我有一个包含 2 个选择的示例。一旦您更改了第一个中的某些内容,第二个(已禁用)应该更改为启用。到那里我没有问题。问题是,当您在第二个中更改某些内容时,应该会打开一个网页。当我没有将 .disabled 分配给“var urlmenu2”但它不工作时,这工作正常。有人知道会发生什么吗?

这是 HTML 代码:

<select id="menu1" >

<option value="0" selected="selected" id="selected"> Select an option </option>
  <optgroup label="Category1:">
  <option value="1"> Option1 </option>
  <option value="2"> Option2 </option>
  <option value="3"> Option3 </option>
  <option value="4"> Option4 </option>
</optgroup>

<optgroup label="Category2:">
  <option value="5"> Option5 </option>
  <option value="6"> Option6 </option> 
  <option value="7"> Option7 </option>
  <option value="8"> Option8 </option>
  <option value="9"> Option9 </option>
  <option value="10"> Option10 </option>
  <option value="11"> Option11 </option>
  <option value="12"> Option12 </option>
  <option value="13"> Option13 </option>
  <option value="14"> Option14 </option>

<optgroup label="Category3:">
  <option value="15"> Option15 </option>
</optgroup>

</select>

<select id="menu2">
  <option value="0" selected="selected" id="selected2"> Select an option </option>
  <option value="1" id="center">Home</option>
  <option value="2" id="home">In the Center</option>
</select>

这是 Javascript 代码:

 var urlmenu1 = document.getElementById('menu1');
 **var urlmenu2 = document.getElementById('menu2').disabled=true;**

urlmenu1.onchange = function change1(){

    if(urlmenu1.selectedIndex != 0){    
        **var urlmenu2 = document.getElementById('menu2').disabled=false;**
        var selected = document.getElementById('selected').disabled=true;
    }

    if(urlmenu1.selectedIndex >= 1 && urlmenu1.selectedIndex <= 4) {
         var opcion = document.getElementById('casa').disabled=false;
         var seleccionado2 = document.getElementById('selected2').disabled=true;
    } 

    if(urlmenu1.selectedIndex >= 6 && urlmenu1.selectedIndex <= 15){
         var opcion = document.getElementById('home').disabled=true;
         var selected2 = document.getElementById('selected2').disabled=true;
    } 

};

 urlmenu2.onchange = function cahnge2(){

    if(urlmenu1.selectedIndex == 1 && urlmenu2.selectedIndex==1){
        window.open("http://www.google.com",'_self');
        urlmenu1.selectedIndex = 0;
        urlmenu2.selectedIndex = 0;
    } 
     if(urlmenu1.selectedIndex == 2 && urlmenu2.selectedIndex==1){
        window.open("http://www.yahoo.com",'_self');
        urlmenu1.selectedIndex = 0;
        urlmenu2.selectedIndex = 0;
    } 

 etc... until 15

谢谢!

【问题讨论】:

    标签: javascript html select onchange


    【解决方案1】:

    如果您禁用某个字段,该功能也会禁用。尝试手动触发更改事件。

     urlmenu2.change();
     urlmenu2.onchange = function() ....
    

    【讨论】:

    • 嘿马科斯,感谢你这么快的回答,我试过了,但它仍然被禁用。还有什么想法吗?
    • 如果您使触发器change() 必须工作,但禁用的属性不会删除。请告诉我们你是怎么做到的
    • 我刚刚添加了“urlmenu2.change();”在您建议的第二个功能之前,也许您的触发器是其他意思?我不习惯这样:/
    • 触发器用于手动触发事件。如果您创建 element.trigger("change") (jquery) 或 element.change() (javascript),即使元素被禁用,事件也会触发。因此,当您需要触发事件时,您可以使用它。
    • 在阅读了很多关于它和你的解释之后,我想我理解它是如何工作的,我尝试在下面的下一个示例中使用它,但我不知道我是否正确使用它,因为它是根本不工作:S
    【解决方案2】:

    我通过配置以下 html 代码结束了该问题: select id="menu2" disabled="true" 我写的是 true 而不是 disabled,正如许多人评论的那样网站。

    现在出现了一个新问题。根据我在第一次选择中所做的更改的值,我想从第二次选择中禁用选项“casa”或激活它。令人难以置信的是,正确禁用“var seleccionado”没有问题,但是对于其他 var:seleccionado2 或 casita,它不起作用。你认为这可能是什么问题?如果您看到“urlmenu1.onchange(casita.disabled=false);”,我什至试图在您评论 Marcos 时强制触发它但我没有实现它。

    谢谢。代码如下:

     var urlmenu1 = document.getElementById('menu1');
     var urlmenu2 = document.getElementById('menu2');
     var desbloqueo = document.getElementById('bloqueo');
     var casita = document.getElementById('casa');
    
    urlmenu1.onchange = function change1(){
    
        if(urlmenu1.selectedIndex !==0){    
            var urlmenu2 = document.getElementById('menu2').disabled=false;
            var seleccionado = document.getElementById('selected').disabled=true;
            desbloqueo.style.display ='none';
        }
    
        if(urlmenu1.selectedIndex >= 1 && urlmenu1.selectedIndex <= 4) {
             var seleccionado2 = document.getElementById('selected2').disabled=true;
              urlmenu1.onchange(casita.disabled=false);
        } 
    
        if(urlmenu1.selectedIndex >= 6 && urlmenu1.selectedIndex <= 15){
             urlmenu1.onchange(casita.disabled=true);
             var seleccionado2 = document.getElementById('selected2').disabled=true;
    
        } 
    
    };
    

    【讨论】:

    • 嗯,我告诉你触发改变事件,但你是听改变事件。 onchange()change() 不同。 urlmenu1.onchange(function() { casita.disabled = false; });它监听变化事件; urlmenu1.change():它触发了更改事件
    • 嗯,这样的错误T.T.虽然用.change尝试也没有结果。现在我不知道该怎么办。我试过:casita.change(casita.disable=false);而不是 urlmenu1.onchange(...) ,虽然尝试使用 urlmenu2.change(casita.disable=false);但它不会改变(禁用或启用)
    • .change() 里面没有任何内容。只调用它 element.change() 来告诉浏览器元素发生了变化。您需要动态更改元素值以尝试其他解决方案
    • 好的,所以里面没有内容,但是我们如何告诉机器必须应用哪个更改? (启用或禁用)会是这样的吗? casita.disabled=false; casita.change();
    • 是的。当您制作 casita.change(); 时,您是在告诉浏览器 casita 元素已更改其值。 Disabled 属性不会触发更改事件。当您制作casita.onchange() 时,您正在监听浏览器是否触发了更改事件,但您不会手动触发它。我希望你能解决它,但我不知道你是什么状态。
    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多