【问题标题】:jquery setting hidden input value not working as expected in IE7 and IE8jquery 设置隐藏输入值在 IE7 和 IE8 中无法按预期工作
【发布时间】:2012-05-26 03:27:22
【问题描述】:

继续采用我的代码来使用 IE...

我有一个隐藏的div,其中包含一个用于编辑某些信息的表单。当用户选择要编辑的项目时,会显示此 div,并使用项目的信息填充字段。那个 div(简而言之)看起来像这样:

<div id="editform">
<form action="" method="post" id="qform" name="qform">
    First param: <input name="field1" id="field1"/> <br/>
    Second param: <input name="field2" id="field2"/> <br/>
    ...

    <input type="hidden" name="qid" id="qid" value=""/>

    <img id="submit" src="..." alt="..." title="..." />
</form>

我使用 jquery 将值设置到字段中。我打开编辑 div 的功能如下所示:

function edit_item(item_id) {
    item = get_item(item_id);    //this will return a JS object
    $('#field1').val(item.property1);
    $('#field2').val(item.property2);
    ...
    $('#qid').val(item_id);
    $('#submit').click(function() {
        alert($('#qid').val());
        $('#qform').ajaxSubmit();
    });
}

所有这些在 FF、Opera、Webkit 和 IE 9 中都可以正常工作,但是在 IE7 和 IE8 中,我遇到了一个奇怪的问题。我可以看到在edit_item 函数中正确设置了item_id,但是一旦该函数完成,隐藏的输入值(qid)就会重置为空字符串。当表单被 ajax 提交时,尽管设置正确,但警报显示该值是一个空字符串。有趣的是,所有其他领域都很好。它在 IE 9 中也能正常工作。

我在这里缺少什么?非常感谢。

【问题讨论】:

  • ID 在 HTML 规范中必须是唯一的。您有多个“#field1”。此外,ID 不能以井号开头。见:stackoverflow.com/questions/448981/…
  • 感谢您的评论,但这不是问题所在。在我的真实代码中,两者都是有效的:唯一的 ID 和没有井号 - 为问题创建简化代码时的拼写错误。
  • 也许 edit_item 函数被错误的 item_id 参数再次触发?您是否尝试添加警报(item_id);行到 edit_item 函数?
  • @Сергій 如果是这样,它在 IE9 和其他浏览器中将无法工作,但在除 IE 7 和 8 之外的所有浏览器中都可以。

标签: javascript jquery internet-explorer html-input


【解决方案1】:

我知道我迟到了,但我使用了以下解决方法,因为在尝试了所有解决方案后它对我不起作用

var id=$(this).data('id');
$('#update_entery_div').append(
                "<input type='hidden' name='id' value="+id+" >"
            );

【讨论】:

    【解决方案2】:

    除了 Aleks G 的回答,我发现 value 属性 不得 在隐藏元素中隐式定义,以便 jQuery .setAttr() 和 .val() 在 IE8 中正常工作.

    更多详情请看这里: jQuery .val() setter not working?

    【讨论】:

      【解决方案3】:

      纯 JavaScript 中没有 JQuery 的 IE 解决方案看起来并不太复杂:

      document.getElementById(id).setAttribute('value', value);
      

      【讨论】:

      • 哇,为什么这行得通,而不是常规的 el.value = value 语法?
      【解决方案4】:

      这完全是愚蠢的,但事实并非如此:

      $('#field1').val(item.property1);
      

      没用。然而

      $('#field1').attr("value", item.property1);
      

      工作正常。就这样吧。

      【讨论】:

      • @NullVoid 刚刚再次检查 - 第二个选项适用于 IE 6、7、8、9 和 10。
      • @AleksG,我也 +1。是的。我也为我工作。一些 IE 浏览器缓存问题 :( 但终于奏效了 :)
      • 疯了。我刚刚在 Mac 上的 Chrome 52 中遇到了同样的问题。 2016 年。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2011-06-11
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多