【问题标题】:Problems when clicking on jquery created elements单击 jquery 创建的元素时出现问题
【发布时间】:2013-06-12 05:33:13
【问题描述】:

我有以下html:

div id="parentanswer">    
<div id="parent0" class="control-group" style="margin: 0;">
<label class="control-label">Answer</label>
<div id="answer0" class="controls">
<input type="text" class="span6 m-wrap" />  
<select name="answerCountry" id="answercountry0" class="select2"><option value="DA">Danmark</option><option value="EN">Engelsk</option><option value="GE">Tysk</option><option value="SE">Svensk</option></select>
Right answer<input type="checkbox" value="" />
</div>
<p style="padding: 0; margin: 0; padding-left: 180px;"><a href id="translateanswer0" answertranslateid="0">Translate answer</a></p>  
</div>  
</div>
<p style="padding: 0; margin: 0; padding-left: 180px;"><a href id="addanswer">Add new answer</a></p> 

还有下面的jquery:

$("[id^=translateanswer]").on("click", function () {
    alert($(this).attr('answertranslateid'));
    answerid = $(this).attr('answertranslateid');
    newtranslateid = '#answer' + answerid;
    answerselectid = 'answerCountry' + answerid;
    alert(newtranslateid);
    $("<div style=\"padding: 0; margin: 0;\" class=\"controls\"><input type=\"text\"     class=\"span6 m-wrap\" />  <select name=\"answerCountry\" id=\"" + answerselectid + "\"     class=\"select2\"><option value=\"DA\">Danmark</option><option value=\"EN\">Engelsk</option>    <option value=\"GE\">Tysk</option><option value=\"SE\">Svensk</option></select>    </div>").appendTo(newtranslateid);
    return false;
});

$('#addanswer').on("click", function () {
    counter++;
    newtranslateid = counter;
    alert(newtranslateid);
    newquestionid = 'answer' + counter;
    newtranslateanswerid = 'translateanswer' + counter;
    answerselectid = 'answercountry' + counter;
    newparentid = 'parent' + counter;
    $("<div id=\"" + newparentid + "\" class=\"control-group\" style=\"margin: 0;\"><label class=\"control-label\">Answer</label><div id=\"" + newquestionid + "\" class=\"controls\"><input type=\"text\" class=\"span6 m-wrap\" /><select name=\"answerCountry\" id=\"" + answerselectid + "\" class=\"select2\"><option value=\"DA\">Danmark</option><option value=\"EN\">Engelsk</option><option value=\"GE\">Tysk</option><option value=\"SE\">Svensk</option></select> Right answer<input type=\"checkbox\" value=\"1\" /></div><p style=\"padding: 0; margin: 0; padding-left: 180px;\"><a href id=\"" + newtranslateanswerid + "\" answertranslateid=\"" + newtranslateid + "\">Translate answer</a></p> </div>").appendTo('#parentanswer');
    return false;
});

当我在 html 代码中单击“翻译答案”时,效果很好,并将正确的 html 附加到我的网站,“添加新答案”也是如此。

当我添加了一个新问题并想翻译它并单击“翻译答案”时,就会出现问题。 然后我的网站只是重新加载,而不调用 $("[id^=translateanswer]").on("click", function(){

我尝试“硬编码”一个 answer1,然后调用“翻译答案”,效果很好,我还尝试清空翻译答案功能,只是发出警报,但它没有提醒消息。我怀疑故障出在 addanswer 函数中,但我找不到。

我创建了一个jsfiddle,但它说要使用帖子来代替?

更新 jsfiddle:http://jsfiddle.net/4cTBP/

【问题讨论】:

  • 它说请使用 Post 请求,因为您将 JS 库设置为 Jquery
  • 谢谢,已解决:)

标签: jquery onclick appendto


【解决方案1】:

要将事件处理程序用于动态生成的元素,您必须在共享父元素(不必是直接父元素)上调用 .on() 并传递您感兴趣的元素的选择器。例如:

<div id="parent">
  <a class="dynamic-element"></a>
  <a class="dynamic-element"></a>
  <!-- etc. -->
</div>
<script>
  $("#parent").on("click", ".dynamic-element", function() {
    // ...
    return false;
  });
</script>

根据您的问题,而不是:

$("[id^=translateanswer]").on("click", function () {

你可能有:

$("#some-parent-element").on("click", "[id^=translateanswer]", function() {

【讨论】:

  • 我创建了一个新的 jfiddle (jsfiddle.net/4cTBP),并尝试实现上述功能,但它似乎不起作用?
  • 那个小提琴中有一个未定义的变量错误(计数器)。我在这里更新了它:jsfiddle.net/4cTBP/1。也许我误解了;点击翻译答案和添加新答案时的预期行为是什么?
  • 它工作得非常完美,当点击翻译答案时,它会在当前答案的“下方”创建一个新行,当点击添加新答案时,它应该创建一个新问题,这也应该能够翻译等等。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
相关资源
最近更新 更多