附加innerHTML的问题

时间:2013-09-01 19:32:03

标签: javascript jquery html string

我有以下textarea html来帮助解决占位符文本值在使用IE10时使用占位符值在焦点上消失的问题

<textarea id="answerText" name="answerText" placeholder="Your answer here..." onfocus="this.placeholder = \'\'" onblur="this.placeholder = \'Your answer here...\'">@answer.Text</textarea>

这是第一个答案的预期呈现,但是当尝试使用javascript为第二个答案附加textarea时,onfocus和onblur事件似乎不起作用,因为当我点击textarea时,占位符值仍然存在。这是我的代码:

 $('#answerList').append('<li><div class="row"><div class="eight columns"><textarea id="answerText" name="answerText" placeholder="Your answer here..." onfocus="this.placeholder = \'\'" onblur="this.placeholder = \'Your answer here...\'"></textarea></div><div class="four columns"><input type="checkbox" name="correctCheckbox" id="correctAnswerCheckbox' + answerPosition + '" value="' + answerPosition + '"/><label for="correctAnswerCheckbox' + answerPosition + '">Correct Answer</label></div></div></li>');

3 个答案:

答案 0 :(得分:0)

试试这个:

var $newField = $('<li><div class="row"><div class="eight columns"><textarea class="answerText" name="answerText" placeholder="Your answer here..."></textarea></div></div></li>').appendTo('#answerList');
$newField = $newField.find('.answerText');
$newField.on('focus', function() {
    $(this).attr('placeholder', '');
});
$newField.on('blur', function() {
    $(this).attr('placeholder', 'Your answer here...');
});

我假设内联偶数处理程序在初始页面呈现后没有注册。

我通常发现在js文件中管理事件处理更有效,而不是将它们内联到dom中。因此,如果没有使用内联事件处理程序的特殊原因,则id建议不要。

编辑:

将类更改为ID,如评论中所述。

答案 1 :(得分:0)

如果您不希望在代码中进行太多更改,可以尝试添加一个计数器,以便为它们提供不同的ID:

var ctr=0;

$('#answerList').append('<li><div class="row"><div class="eight columns"><textarea id="answerText'+crt+'" name="answerText" placeholder="Your answer here..." onfocus="this.placeholder = \'\'" onblur="this.placeholder = \'Your answer here...\'"></textarea></div><div class="four columns"><input type="checkbox" name="correctCheckbox" id="correctAnswerCheckbox' + answerPosition + '" value="' + answerPosition + '"/><label for="correctAnswerCheckbox' + answerPosition + '">Correct Answer</label></div></div></li>');

ctr++; /// ctr +1;

然后在循环中添加ctr +1。

这假设重复已经存在并将解决ID问题。

如果您想要500 textareas,如果您想拨打第300,您可以: $('textarea[id*="300"]')

或者如果您希望将其他所有人称为其他人:

$('textarea[id*="answerText"]') 

答案 2 :(得分:0)

据我所知,placeholder的预期行为不会消失,直到在框中输入内容为止。

但是,如果您仍想让它在焦点/模糊时显示/隐藏,我建议将一些类分配给textarea元素,并将焦点和模糊事件与javascript代码绑定。

我做了fiddle来说明我的观点。

<textarea id="answerText" name="answerText" placeholder="Your answer here..." class="answer">@answer.Text</textarea>


$('#add').on('click', function(){
    $('<textarea class="answer" placeholder="text here" ></textarea>').appendTo('#answers');
});
//#answers is the container for the answers
$('#answers').on('focus', '.answer', function(){
    this.placeholder = '';
});

$('#answers').on('blur', '.answer', function(){
    this.placeholder = 'text here';
});

通过这种方式,代码将更加可维护和解耦,作为副​​作用,您将避免遇到的问题。