jQuery.find()将一个表单转换为一个不起作用的元素

时间:2013-09-03 21:04:41

标签: javascript jquery forms find

动态地我将一个公式生成到一个已定义的div-container中,我想抓住发送动作以便用ajax发送。

生成HTML:

<div class="mhuntform">
<form action="/wp-admin/admin-ajax.php" method="POST">
<h2>Title</h2>
<p>A text</p>
<div id="form" style="padding: 5px 0px;">
<p>
<label for="email" style="display: inline-block; margin-right: 10px;">E-Mail</label>
<input type="email" name="email" id="email" placeholder="E-Mail" style="width: 60%;">
</p>
<p>
<button name="mhskl_send" id="mhskl_send">Anmelden</button>
</p>
</div>
</form>
</div>

Formular由admin定义到wordpress-page。在Javascript(jQuery)中我只知道div-container的类名(这里是.mhuntform)。所以在Javascript中我试着抓住这个事件:

// mhuntskl.options.container = '.mhuntform'
$(mhuntskl.options.container).find('form').submit(function(ev){
    ev.preventDefault();
    var email = $(mhuntskl.options.container).find('input[type="email"]').val();
    var res = $.ajax(mhuntskl.options.ajaxurl,{async:false,data:{action:'subscribe',email:email},dataType:'json',type:'POST'}).responseText;
    res = $.parseJSON(res);
    if (res.success) {
        $(mhuntskl.options.container).hide();
    }
    return false;
}

但不幸的是,提交事件将无法捕获,如果我使用find打印到控制台console.log($(mhuntskl.options.container).find('form')),它将仅收到一个空对象。

我在这里弄错了什么?

1 个答案:

答案 0 :(得分:0)

如果 console.log($(mhuntskl.options.container).length); 为1且 console.log($(mhuntskl.options.container).find('form ')。length); 为0然后只有一个可能的原因。执行代码时,表单仍然不在 .mhuntform div中。是由另一个JavaScript生成的那个表单。如果没有,那么js代码包含在 $(document).ready