2012-04-11 168 views
5
var makeField = function(name, value) { 
    return $('<input />').attr({ 
     type: 'hidden', 
     name: name, 
     value: value 
    }); 
}; 

$('.login').on('click', function() { 
    var form = $('<form />').attr('method', 'POST'); 

    form.append(makeField('n0', 'data1')); 
    form.append(makeField('n1', 'data2')); 
    form.append(makeField('n2', 'data3')); 

    $(document).append(form); 
    form.submit(); 
}); 

上述代碼在Safari,Chrome和Opera中正常工作,但firefox忽略form.submit();。我通過在提交調用的上方和下方添加console.log('...');來測試上述代碼,並且它無誤地執行。我也嘗試撥打$(form).submit();,我得到了相同的不想要的結果。Firefox jQuery表單提交不起作用

有沒有人遇到過這個,或有解決方案?

+0

要更加友好的jQuery,嘗試改變'變種形式=使用document.createElement( '形式');''到形式變種= $(「

」).attr('method','POST');' – SpYk3HH 2012-04-11 15:02:03

+0

關鍵部分是jQuery的append()在非元素上調用時默默無聞。 – 2012-04-11 18:42:43

回答

5

與你的新代碼更新

$(function() { 
    var makeField = function(name, value) { 
     return $('<input />').attr({ 
      type: 'hidden', 
      name: name, 
      value: value 
     }); 
    }; 

    $(document).on('click', '.login', function() { 
     var form = $("<form />").attr({ method: "POST" }).append(
       makeField('n0', 'data1'), 
       makeField('n1', 'data2'), 
       makeField('n2', 'data3') 
      ); 

     // just adding a callback on submit here to show it works 
     form.submit(function(e){ alert("Submitting Form"); }); 

     $("body").append(form); 
     form.submit(); 
    }); 
}) 

WORKING jsFiddle in FF HERE

+0

感謝代碼清理,但這並沒有解決我的Firefox問題。 – 2012-04-11 15:12:26

+0

fyi剛剛通過探索進行了編輯,真的需要看到更多你正在做什麼來確定問題,我認爲這完全不是你的代碼,而是碎片? – SpYk3HH 2012-04-11 15:13:24

+0

我修改了我的原始代碼以包含您的編輯內容,以及它的實際外觀,以及唯一更改的內容是這些字段的名稱和值。 – 2012-04-11 15:17:19