javascript删除功能在IE中不起作用

时间:2012-12-12 08:54:23

标签: javascript forms

我正在使用动态文本框。当有人点击"Add Option"时,将动态添加文本框。当点击"Remove"时,文本框将被动态删除。它的所有代码都适用于所有浏览器,但{7}}函数在IE 7中不起作用

请帮我解决这个问题

这是javascript代码

"Remove"

HTML代码

function addFormField()
{
  var optionId = $("#optionId").val();
  $("#pollOption").append("<p id='row" + optionId + "'><label for='txt" + optionId + "'>Option : <input type='text' size='20' name='option_"+optionId+"' id='option_"+optionId+"' name='option_"+optionId+"' class='text_field pollOption' validate='required:true'  \/> <a href='#' onclick='removeFormField(\"#row" + optionId + "\"); return false;'>Remove<\/a><\/br><\/p>");
  optionId = (parseInt(optionId) + 2) - 1;
  $("#optionId").val(optionId);
}

function removeFormField(optionId)
{
  $(optionId).remove();
  optionId = (parseInt(optionId) + 1) - 2;
}
$.validator.setDefaults(
{
  errorClass:"fontColorRed",
  submitHandler: function()
  {
    setPoll();
    return false;
  }
});

2 个答案:

答案 0 :(得分:1)

我不确定,但您的问题可能来自您附加到#pollOption的无效HTML代码。我指的是你打开但永远不会关闭的<label>元素。可能还有其他一些我没看到的东西。

这里的根本问题是我没有看到这些。我没有看到它们,因为您的代码几乎不可读,因此容易出现各种错误。 (在你的问题的评论部分也很明显,人们谈论“哦,我错过了......”)。

我不想听起来很卑鄙,但你的代码闻起来很香。 (这不是令人反感的:link)。

window.optionId = 2;

window.addFormField = function() {
    optionId += 1;
    var thisOption = $('<p>', {
        'id': 'row' + optionId
    }).append(
        $('<label>').attr({
            'for': 'txt' + optionId
        }).html('Option : '), 
        $('<input>').attr({
            'type': 'text',
            'size': 20,
            'name': 'option_' + optionId,
            'class': 'text_field pollOption',
            'validate': 'required:true'
        }), 
        $('<a>').attr({
            'href': '#'
        }).html('Remove').click(function() {
            thisOption.remove();
        })
    ).appendTo('#pollOption');
};

$.validator.setDefaults(
{
  errorClass:"fontColorRed",
  submitHandler: function()
  {
    setPoll();
    return false;
  }
});

我重构了你的addFormField函数:

  • 我让jQuery构造元素,这样就不会生成或使用无效的标记。
  • 我嵌入了remove函数,所以我可以直接引用我要删除的元素(不必在DOM中搜索它)。
  • optionId现在是一个Number变量,您可以简单地递增(不进行任何解析)。

这个重构的代码肯定仍然闻起来,因为封装问题(全局变量无处不在!)和其他问题,但我认为它更具可读性和更强大。

答案 1 :(得分:0)

我没有理解你代码中的几个部分。但我建议,如果你在IE中删除元素时遇到问题,试一试。

Description says it worked.

并且始终可以选择将该div的innerHTML设置为“”(空字符串)。我知道这不好,但最后一件事可以尝试。