在IE9中没有调用select元素的内联处理程序

Inline handler not being called in IE9 for select element

本文关键字:处理 程序 元素 select IE9 调用      更新时间:2023-09-26

我正在尝试找出在生产机器上可能导致IE9出现问题的原因。我们有一个<select>组合框与一个内联的变化处理程序(我知道这是不好的做法,但我不能做任何关于那时刻),没有被调用。

HTML看起来像下面(从开发工具复制)

<select name="propertyName" id="propertyName" onchange="Workflows.CoreSetPropertyActivity._field_OnChange();">
  <option value="Property_103156" title="Boolean Prop" selected="selected">Boolean Prop</option>
  <option value="Property_103072" title="String Prop A">String Prop A</option>
</select>

在与客户的webex上,我在Workflows.CoreSetPropertyActivity._field_OnChange()中放置了一个断点,它没有被调用(在IE9中)。如果我在控制台中手动调用它,一切都可以正常工作。

我们使用IE8和Workflows.CoreSetPropertyActivity._field_OnChange()的完全相同的机器,并且一切正常工作。

我认为唯一相关的信息是下拉菜单是动态创建的。

有人遇到类似的东西吗?有什么建议可以试试吗?也许IE中的一些设置可以打破这个魔咒?

创建HTML

使用以下代码将选择添加到页面中。要插入的HTML看起来像

<div class="wrapper">
    <ul id="setStateConditions">
        <li class="setStateLabel">Property Name</li>
        <li class="setStateContent">
            <select name='propertyName' id='propertyName'  onchange='Workflows.CoreSetPropertyActivity._field_OnChange();' >
<option value='Property_103156' title='Boolean Prop'  selected='selected' >Boolean Prop</option>
<option value='Property_103072' title='String Prop A' >String Prop A</option>
</select>
<br />
<input id="filterExpression" name="filterExpression" type="hidden" value="" />
<script type="text/javascript">
    _condition_strings = 
    {
        "equal": "Is Equal To",
        "not_equal": "Is Not Equal To",
        "contains": "Contains",
        "less_than": "Is Less Than",
        "less_than_or_equal": "Is Less Than or Equal To",
        "greater_than": "Is Greater Than",
        "greater_than_or_equal": "Is Greater Than or Equal To",
        "literal": "Literal Value",
        "is_collected": "Has Been Collected",
        "is_not_collected": "Has Not Been Collected"
    }; 

    function getLeftUrl(leftMenu, value) {
        var selectedProperty = $('#propertyName').val() || '';
        return "/Property/ReflectionMenuLeftByRelation/" + workflow.data_provider_id
             + "?relationSafeName=" + selectedProperty 
             + "&nameWithParents=" + value; 
    };
    function getRightUrl(rightMenu, value) {
        //Find value of left to filter 
        var selectedProperty = $('#propertyName').val() || '';
        var leftMenuValue = rightMenu.item.prevAll(".left-operand").eq(0).attr("value") || '';
        return "/Property/ReflectionMenuRightByRelation/" + workflow.data_provider_id
             + "?relationSafeName=" + selectedProperty
             + "&nameWithParents=" + value
             + "&compatableWithSafeName=" + leftMenuValue; 
    };
    function getOperatorUrl(operatorMenu, value) {
        //Find value of left in order to get the correct list of 
        var selectedProperty = $('#propertyName').val() || '';
        var leftMenuValue = operatorMenu.item.prevAll(".left-operand").eq(0).attr("value") || '';
        return "/Property/OperatorsByRelation/" + workflow.data_provider_id
             + "?relationSafeName=" + selectedProperty
             + "&compatableWithSafeName=" + leftMenuValue; 
    };
    function getLiteralControlUrl(rightMenu, startValue, leftMenuValue, uniqueRowCounter) {
        var selectedProperty = $('#propertyName').val();
        var leftMenuValue = leftMenuValue || rightMenu.item.prevAll(".left-operand").eq(0).attr("value") || '';
        return "/Property/PropertyValueByRelation/" + workflow.data_provider_id
             + "?relationSafeName=" + selectedProperty
             + "&safeNameWithParents=" + leftMenuValue
             + "&domId=literal_" + uniqueRowCounter
             + "&startValue=" + startValue; 
    }
    function getDereferenceUrl(menu){
        var selectedProperty = $('#propertyName').val() || '';
        return "/Property/ResolveSafeNameToDisplayNameByRelation/" + workflow.data_provider_id
             + "?relationSafeName=" + selectedProperty
             + "&safeNameWithParents=" + menu.getValue();
    }



    $(function() {
        ExpBuilder.init($("#filterExpression").val());
        //Move to a wider space
        $("#expressionBuilder").appendTo("#propertyValueWide");
    });
onSaveParameters = function() {
    //When User clicks save
    if ($("#expressionBuilder").is(":visible")) {
        //TODO check for empties    
        $("#filterExpression").val(ExpBuilder.getJson())
        Workflows.CoreSetPropertyActivity._UpdateJson()
    }
}
ExpBuilder.errorNoCondition = 'There are no conditions.';
</script>
<div id="expressionBuilder" style="display:none;">
    <div class="clr"></div>
    <div class="condLoader"></div>
    <div class="condWrapper" style="display:none;">
        <div class="conditionGroup condTier1 condTop" >
            <div class="conditionGroupBullet"><div><img src="/images/spacer.gif" alt="" width="10" height="3"></div></div>
            <div class="conditionHead">
                <div class="conditionOperation">
                    <select id="100" name="anyAll">
                        <option value="or">Any</option>
                        <option value="and">All</option>
                    </select> 
                </div>
                <div class="closeBtn"><img src="/images/buttons/close.png" class="closeGroupImg" alt=""></div>
            </div>
            <div class="conditionContent"></div>
            <ul class="buttons buttonsLeft">
                <li>
                    <a href="#" class="btnAddCondition"><span>Create Condition</span></a>
                </li>
                <li>
                    <a href="#" class="btnAddConditionGroup"><span>Create Group Condition</span></a>
                </li>                
            </ul>
        </div> 
    </div>
    <ul class="buttons buttonsLeft hidden">
        <li>
            <a href="#" class="btnAddCondition" onclick="CreateJsonBase();return false;"><span>Create Json</span></a>
        </li>       
        <li>
            <a href="#" class="btnAddCondition" onclick="ExpBuilder.LoadData();return false;"><span>Load Json</span></a>
        </li>                     
    </ul>
    <!-- Template for Conditions -->
    <div class="condition hidden">
        <div class="conditionBullet"><div><img src="/images/spacer.gif" alt="" width="10" height="3"></div></div>
        <div class="conditionItem">
            <a href="#" class="left-operand"></a> 
            <a href="#" class="operator"></a> 
            <a href="#" class="right-operand"></a>
            <span class="right-literal"></span>
        </div>
        <div class="closeBtn"><img src="/images/buttons/close.png" class="closeImg" alt=""></div>
        <div class="clr"></div>
    </div>
</div>
<span id="propertyValue">
    <input type="checkbox" id="setDefault" onclick="Workflows.CoreSetPropertyActivity._field_OnChange();" />
    <label for="setDefault">Default Value</label>
    <span id="defaultOptions"> 
        <input id="setPropertyValue" name="setPropertyValue" onblur="Workflows.CoreSetPropertyActivity._UpdateJson();" onchange="Workflows.CoreSetPropertyActivity._UpdateJson();" onkeypress="Workflows.CoreSetPropertyActivity._UpdateJson();" type="text" value="" /><br />
        <input type="checkbox" id="allowEdit" onclick="Workflows.CoreSetPropertyActivity._field_OnChange();" />
        <label for="allowEdit">Allow Edit</label> <br />
    </span>
</span>
<div>
    <input type="checkbox" id="isRequired" onclick="Workflows.CoreSetPropertyActivity._field_OnChange();" checked/> 
    <label for="isRequired">Is Required</label>
</div>
<input type="text" id="PropertyName" class="hidden" />

        </li>
    </ul>

    <div id="propertyValueWide"></div>

    <div class="clr"></div>
</div>

并使用

将其添加到页面中(其中htmlString包含我上面显示的HTML)
$(htmlString).appendTo('.settings-form');

原来问题是客户运行的是出厂版本(RTM)的IE9,这是Internet Explorer的预发布版本,就在GA发布之前。

客户在另一台机器上安装了IE9,问题就解决了。我很有信心,当他们在那台机器上重新安装IE时,这个问题会解决的。

感谢大家的参与