1

現在の内容に基づいて、ラベルの一連の「for」属性を置き換えようとしています。

アプリケーションはAJAXを使用して、ページを更新せずに請求書にアイテムを追加しています。アイテムの追加が成功したという通知を受け取ったら、スクリプトは、「for」属性が「-new」で終わるフォームのすべてのラベルを、同じ属性から「-new」を引いたものに置き換え、('-' + itemValue)を追加する必要があります。ここで、itemValueは、追加された請求書アイテムのアイテムIDです。

一度に変更したいすべてのラベルを選択する方法を知っています。

jQuery('label[for$=new]')

'for'属性を取得する方法を知っています:

jQuery('label[for$=new]').attr('for')

JavaScriptのreplaceメソッドを試しました:

jQuery('label[for$=new]').attr('for').replace(/-new/,itemValue)

しかし、置換したい'for'属性を持つラベルを識別する方法がわからないため、各ラベルの'for'属性を選択し、テキストを置き換え、置き換えられたテキストを(何も戻さずに)戻すように見えます。

ここにいくつかのサンプルHTMLがあります:

<form id="InvoiceItemsForm-1" action="<?=$_SERVER['PHP_SELF'];?>" method="post" name="InvoiceItemsForm-1" onsubmit="return false">
<div id="InvoiceItem-new-1" class="InvoiceItem">
<label for="InvoiceItemNumber-new">New Invoice Item Number: </label>
<input id="InvoiceItemNumber-new" class="InvoiceItemNumber" type="text" value="" name="InvoiceItemNumber-new">
<label for="InvoiceItemDescription-new">Item Description: </label>
<input id="InvoiceItemDescription-new" class="InvoiceItemDescription" type="text" value="" name="InvoiceItemDescription-new">
<label for="InvoiceItemAmount-new">Item Amount: </label>
<input id="InvoiceItemAmount-new" class="InvoiceItemAmount" type="text" value="" name="InvoiceItemAmount-new">
<input id="addInvoiceItem-1" width="25" type="image" height="25" src="/payapp/images/greenplus.th.png" alt="Add New Invoice Item" onclick="addInvoiceItemButtonPushed(this)" value="invoiceItem">
</div>
<button id="CloseInvoice-1" onclick="closeInvoice(this)" type="button">Close Invoice</button>
</form>

これが機能するようになったら、すべての入力のすべてのIDを置き換えます。同じ問題。解決策は次のようになります。

jQuery('input[id$=new]').attr('id').replace(/-new/,itemValue)

私はこれの構文をまったく理解できません。

4

3 に答える 3

1

使用する必要はありません.each()....attr()メソッドは、置換として使用される新しい値を返す2番目のパラメーターとして関数を受け入れます

jQuery('label[for$=new]').attr('for', function(index, currentValue){
   return currentValue.replace(/-new/,'-' + itemValue);
});
于 2012-04-28T12:16:01.913 に答える
0

質問がよくわかりませんが、次のようなものです。

var oldFor = $('label[for$=new]').attr('for');
var newFor = oldfor.replace(/-new/,itemValue);

$('label[for$=new]').attr('for', newFor);

.attr(属性名、値)

attributeName = The name of the attribute to set.
value = A value to set for the attribute.

複数の要素を選択するときは、繰り返す必要があります。

$('label[for$=new]').each(function(index) {
  $(this).attr('for', $(this).attr('for').replace(/-new/, '-' + itemValue));
});
于 2012-04-28T02:03:34.060 に答える
0

もしよろしければ、inputタグをタグの中に入れてみませんlabelか? そうすれば、タグfor内に属性は必要ありません。label

次に、行おうとしていることを達成するためのより良い方法は、請求書 ID 番号を周囲の ID として使用し、div「新しい」請求書エントリの「新しい」クラスを追加することです。

したがって、フォームは次のようになります。

<form id="InvoiceItemsForm-1" action="<?=$_SERVER['PHP_SELF']" method="post" name="InvoiceItemsForm-1" onsubmit="return false">   
    <div class="InvoiceItem new">   
        <label>New Invoice Item Number: <input class="InvoiceItemNumber" type="text" value="" name="InvoiceItemNumber"></label>   
        <label>Item Description: <input class="InvoiceItemDescription" type="text" value="" name="InvoiceItemDescription-new"></label>   
        <label for="InvoiceItemAmount-new">Item Amount: <input class="InvoiceItemAmount" type="text" value="" name="InvoiceItemAmount-new"></label>   
        <input id="addInvoiceItem-1" width="25" type="image" height="25" src="/payapp/images/greenplus.th.png" alt="Add New Invoice Item" onclick="addInvoiceItemButtonPushed(this)" value="invoiceItem">   
    </div>   
    <button id="CloseInvoice-1" onclick="closeInvoice(this)" type="button">Close Invoice</button>   
</form>

新しい請求書項目フィールド データを取得するために必要なすべての対象指定可能性はまだありますが、「新しい」請求書行から「既存の」請求書項目行に変換するために行うことは 2 つだけです。id属性を追加します。どちらも jQuery を使用すると非常に簡単に行うことができdivます。new

于 2012-04-28T02:15:54.753 に答える