2011-02-23 111 views
0

所以我有一个下拉列表和一个文本框:问题与jQuery的onchange()事件

<table> 
         <tr> 
          <td>Group Name: </td> 
          <td><%= Html.DropDownListFor(m => m.IndicationCalculatorGroupId, DropDownData.IndicationsGroup(SessionManager.Company.EntityID, ICConstants.IndicationsCalculatorGroupType), "", new { propertyName = "IndicationCalculatorGroupId", onchange = "UpdateField(this, false);GroupNameChange();" })%></td> 
         </tr> 
         <tr id="newGroupNameRow"> 
          <td>New Group Name: </td> 
          <td><%= Html.TextBoxFor(m => m.IndicationCalculatorNewGroupName, new { @class = "economicTextBox", propertyName = "IndicationCalculatorNewGroupName", onchange = "UpdateField(this);" })%></td> 
         </tr> 
        </table> 

我有JQuery的显示/在页面上隐藏基础上,滴在文本框向下选择。

function GroupNameChange() 
     { 
      $("#IndicationCalculatorGroupId").change(function() { 
       if ($("#IndicationCalculatorGroupId option:selected").text() == 'Create a New Group') 
       { 
        $("#newGroupNameRow").show(); 
       } 
       else{ 
        $("#IndicationCalculatorNewGroupName").val(''); 
        $("#newGroupNameRow").hide(); 
       } 
      }); 
     } 

但似乎你第一次改变下拉到“创建新组”,在文本框中不显示或做任何事情,当你选择一些其他的价值,然后只有选择“创建新组”代码开始工作。

什么不正确连接?

回答

1

尽量把你的代码加载页面时:一旦值已经改变触发

$(function() { 

    $("#IndicationCalculatorGroupId").change(function() { 
       if ($("#IndicationCalculatorGroupId option:selected").text() == 'Create a New Group') 
       { 
        $("#newGroupNameRow").show(); 
       } 
       else{ 
        $("#IndicationCalculatorNewGroupName").val(''); 
        $("#newGroupNameRow").hide(); 
       } 
      }); 


}); 
+0

它的工作原理,不是当你从空的“空”选择,到“创建新的组”选择。 – slandau 2011-02-23 15:19:34

+0

@slandau - 这是因为,正如我在我的回答中所解释的,您的更改处理程序不会在第一次调用GroupNameChange之后才设置。这就是为什么@ alexl的答案会起作用 - 它立即设置处理程序。 – justkt 2011-02-23 15:21:39

0

onChange事件(即:一旦你点击了选择框)。你应该使用mouseDown()事件。

1

相反的:

function GroupNameChange() 
     { 
     ... 
     } 

用途:

$(document).ready(function() 
     { 
      $("#IndicationCalculatorGroupId").change(function() { 
       if ($("#IndicationCalculatorGroupId option:selected").text() == 'Create a New Group') 
       { 
        $("#newGroupNameRow").show(); 
       } 
       else{ 
        $("#IndicationCalculatorNewGroupName").val(''); 
        $("#newGroupNameRow").hide(); 
       } 
      }); 
     }); 

眼下GroupNameChange()必须被调用一次(第一次调用)的变化处理程序进行注册。您希望在页面加载时发生(在准备好的事件中)。您不需要在onchange中调用GroupNameChange()。 .change()将自动接入。您可以完全删除onchange并从.change()处理程序中调用updateField。

另外,如果你想保持GroupNameChange,删除

$("#IndicationCalculatorGroupId").change(function() { 
}); 

,并只保留其中的功能是线。如果没有其他匿名更改处理程序被调用,则每次都会调用GroupNameChange。