javascript
  • jquery
  • ajax
  • forms
  • jqtouch
  • 2012-02-19 76 views 0 likes 
    0

    我是php开发人员开始变得更沉重的Ajax,我遇到了一个问题,我不知道如何解决。AJAX/Javascript在表单中,然后提交它

    我就喜欢这个动态创建一个表单:

    function addSearchResult(label, tz) { 
        var html = ''; 
        html += '<div>' 
        html += '<form id="product-form" >'; 
        html += '<div class="clock">' 
        html += '<div class="hour"></div>' 
        html += '<div class="min"></div>' 
        html += '<div class="sec"></div>' 
        html += '<input type="text" id="label" name="Label" placeholder="Label">' 
        html += '</div>' 
        html += '<div class="city">GMT</div>' 
        html += '<a href="#" class="whiteButton submit" id="view-product-button" >View</a>' 
        html += '</form>' 
        html += '</div>' 
        var insert = $(html); 
        $('#search-results').append(insert.data('tz_offset', tz).find('.city').html(label).end()); 
    } 
    

    而且我读表单结果是这样的:

    $('#product-form').submit(function() { 
        alert('OK'); 
        addProduct('Test Value', 'Test Produlct'); 
        $('input').blur(); 
        $('#add .cancel').click(); 
        this.reset(); 
        return false; 
    }); 
    

    的问题是,这是行不通的。如果我直接将表单直接放在html中,它可以正常工作。但通过Ajax添加它,它不会接受表单存在。

    我应该如何解决这个问题?

    +2

    另外什么罗里McCrossan说,请你帮个忙,并使用客户端HTML模板如[把手](HTTP ://handlebarsjs.com/),而不是一点一点地构建HTML字符串,然后用jQuery操作它来改变你需要改变的数据。 – TheShellfishMeme 2012-02-19 16:28:15

    回答

    3

    使用快捷事件处理程序(例如,submit()click())仅适用于页面加载时放置在DOM中的元素。

    对于动态添加的元素,对于jQuery 1.7+,您需要使用delegate()on()。试试这个:

    < JQ 1.7

    $('#search-results').delegate('#product-form', 'submit', function() { 
        // rest of your code 
    }); 
    

    JQ 1.7+

    $('#search-results').on('submit', '#product-form', function() { 
        // rest of your code 
    }); 
    
    +0

    谢谢!它的工作原理 – 2012-02-19 16:34:55

    +0

    以上也可以使用jQuery的'.live()'方法完成,但由于这里描述的问题,不建议使用这种方法:http://api.jquery.com/live/ – Vivek 2012-02-19 16:56:02

    +0

    @Vivek'live()在任何情况下都不应再使用。甚至在它被弃用之前,它的使用被'delegate()'取代,因为它的性能要好得多。 – 2012-02-19 17:10:02

    相关问题