2011-07-29 3 views
2

を一般私は、この一般化したい:message_post [1 1000]JqPostForm [1 1000]ためこのjqueryのコード

<html> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script> 
$(function(){ 
    $('#target1').click(function() { 
    $.post("process_form.php", $("#JqPostForm1").serialize(), 
     function(data){ 
      $("#message_post1").html(data.reddit + " promoted!"); 
    }, "json"); 
    }); 
    $('#target2').click(function() { 
    $.post("process_form.php", $("#JqPostForm2").serialize(), 
     function(data){ 
      $("#message_post2").html(data.reddit + " promoted!</div>"); 
    }, "json"); 
    }); 
}); 
</script> 
<body> 
<div id="message_post1"> 
    <form id="JqPostForm1"> 
    <input type="hidden" name="reddit" value="pics" /> 
    <div id="target1">+</div> 
    </form> 
</div> 
<div id="message_post2"> 
    <form id="JqPostForm2"> 
    <input type="hidden" name="reddit" value="documentaries" /> 
    <div id="target2">+</div> 
    </form> 
</div> 
</body> 
</html> 

ターゲット[1 1000]を1000のjquery関数を持つよりも良い方法でなければならないし、1000のフォームを持つよりも良い方法かもしれない。

は、私は、これはあなたが私の謝罪を持っているとし、そのために開始するには少しも具体的な質問かもしれないことを認識

process_form.phpはちょうど、フォームの値をエコーバック)。

SOLVEDよろしくお願いします。完全なソリューション:

<html> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script> 
$(function(){ 
    $('.target').click(function() { 
    var target = $(this); 
    $.post("process_form.php", target.parent().serialize(), 
     function(data){ 
     target.parent().html(data.reddit + " promoted!"); 
    }, "json"); 
    }); 
}); 
</script> 
<body> 
    <form> 
    <input type="hidden" name="reddit" value="pics" /> 
    <div class=target>+</div> 
    </form> 
    <form> 
    <input type="hidden" name="reddit" value="documentaries" /> 
    <div class=target>+</div> 
    </form> 
</body> 
</html> 

答えて

3

クラスを追加目標を設定してコードをこれに変更してください

$('.target').click(function() { 
    var target = $(this); 
    $.post("process_form.php", target.parent().serialize(), 
    function(data){ 
     target.parent().parent().html(data.reddit + " promoted!</div>"); 
    }, "json"); 
}); 
1

あなたはすべての要素に同じ機能を結合して、このようにそれのうちの数を解析できます。このような

$('[id^=target]').click(function() { 
    var number = $(this).attr('id').substring(6); 
    $.post("process_form.php", $("#JqPostForm" + number).serialize(), 
    function(data){ 
     $("#message_post" + number).html(data.reddit + " promoted!</div>"); 
    }, "json"); 
}); 
2

何か:

function processForm($form, $msg) { 
    $.post("process_form.php", $form.serialize(), 
     function(data){ 
      $msg.html(data.reddit + " promoted!</div>"); 
    }, "json"); 
    } 

$('.target').click(
    processForm($(this).closest('form'), $(this).closest('.messagePost')); 
) 


<div id="message_post1" class="messagePost"> 
    <form id="JqPostForm1"> 
    <input type="hidden" name="reddit" value="pics" /> 
    <div id="target1" class="target">+</div> 
    </form> 
</div> 
<div id="message_post2" class="messagePost"> 
    <form id="JqPostForm2"> 
    <input type="hidden" name="reddit" value="documentaries" /> 
    <div id="target2" class="target">+</div> 
    </form> 
</div> 
1

このようなものが動作するはずです:

$('div[id^=target]').click(function() { 
    var current = this; 
    $.post("process_form.php", $(this).parent().serialize(), 
     function(data) { 
      $(current).parent().parent().html(data.reddit + " promoted!</div>"); 
    }, "json"); 
}); 
関連する問題