InnerHTML元素对jQuery函数可见吗?

时间:2015-08-06 作者:Vegan Sv

例如,在我的管理页面,即仪表板侧:

//This is hidden until search results come back
//which will be inserted as innerHTML within #searchResults
<div id="hideShow">
<h2>Search Results</h2>
<div id="searchResults"></div>
</div>

//This is visible all the time
<div><form>some fields etc</form><button id="buttonSearch"></div>
然后:

//javascript file start
jQuery(document).ready(function($)
{
    jQuery("#hideShow").hide();

    jQuery("#buttonSearch").click(function()
    {
        jQuery.post(ajax_object.ajax_url, data, function(response)
        {
            //response is json array, I loop through and it becomes:

           ( contents of response :
        <tr><td><a id="edit">Edit</a> | <a onclick="haha()">Delete</a></td></tr> )

            document.getElementById("searchResults").innerHTML = response;
            jQuery("#hideShow").show();
        }
    }
}

jQuery("#edit").click(function()
{
        alert(\'inside edit\');
}   

function haha()
{
    alert(\'im haha\');
}

//javascript file end
我必须键入一个简化版本,这样就忽略了拼写错误等,这是一个有效的代码。问题是两者

<a id="edit">Edit</a> | <a onclick="haha()">Delete</a>
输出为innerHTML和常规JS函数,哈哈,但“编辑”不起作用。我尝试了innerHTML内外的各种位置,只要它在innerHTML jQuery之外,“编辑”起作用,但在里面就不行了。

我可以找到一个解决方法,但它是应该工作的,还是每当您以innerHTML的形式输出某个内容时,jQuery都看不到它?因为在查看页面源代码时,innerHMTL不可见。

1 个回复
最合适的回答,由SO网友:mmm 整理而成

什么时候("#edit").click( 调用时,元素“#edit”不存在,因此.click( 无法附加

解决方案1click( 之后不久.innerHTML = response

解决方案2使用如下委托事件:$("body").on("click", "#edit", function () {...

结束