javascript
  • jquery
  • ajax
  • forms
  • jqtouch
  • 2012-02-19 39 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

    相關問題