2016-05-17 24 views
1

私は死んだ単純なものでなければならないと思っているものに固執しています。要素の 'text'をクラス名で修正してください

私が持っているHTMLで

<a class="removeQuantity"> - </a> 
<span class="quantity"> 1 </span> 
<a onclick="addQuantity('2')"> + </a> 
をし、私のスクリプトでは、私は機能を持っている:

function addQuantity(iQuant) { 
    iQuant = parseInt(iQuant); 
    $(this).prevAll('.quantity').text(iQuant.toString()); 
} 

それでは、私がやろうとしていると、値が含まれて変更されます1から数量のクラスを関数に渡した値(2)には何も作用していないようです。

誰かが正しい方向に私を向けることができますか?

おかげで、 C

答えて

1

問題あなたは、現在の要素のスコープを設定していない、それを属性on*を使用してイベントハンドラを割り当てるときのでthisがウィンドウに上げ、ない要素を指していることですイベント。上記の例では、私はその型にキャストすることを避けるために関数に直接整数を通過したことを

<a onclick="addQuantity(2, this)"> + </a> 
function addQuantity(iQuant, el) { 
    $(el).prevAll('.quantity').text(iQuant); 
} 

注:この問題を解決するには、このように、関数に直接要素の参照を渡すことができます。

より良い代替手段として、控えめなJSを使用してイベントハンドラをアタッチすることができます。あなたはjQueryを使って質問をタグ付けを考えると、ここでそれを行う方法は次のとおりです。

私は取得にいるページのセクションとして(と思う!)、目立たない使用することはできません
<a class="quantity-amend" data-quantity="2"> + </a> 
$('.quantity-amend').click(function(e) { 
    e.preventDefault(); 
    $(this).prevAll('.quantity').text($(this).data('quantity')); 
}); 

数量の変更が確認されたときに再ロードされます。

は、この場合は、あなたが委任イベントハンドラを使用することができます:あなたのコードで `e`が欠落している

$(document).on('click', '.quantity-amend', function(e) { 
    e.preventDefault(); 
    $(this).prevAll('.quantity').text($(this).data('quantity')); 
}); 
+0

私はそれを修正し、あなたが戻りました。私は '.click'より' .on'を好むでしょう。なぜなら、前者は動的に追加された要素のためにメモリと作業を減らすことができるからです。 –

+0

@SusheelSinghありがとうございます。また、編集した 'on()'のメソッドシグネチャは、動的要素に対しては全く機能しません。あなたは '$( 'parent')を使う必要があります。on( 'event'、 'child'、fn)'; –

+0

ええ、あなたは正しいです、私はポイントを忘れました。しかし、私はどこでも永遠に使うことを好む。それはより汎用的で読みやすいです:) –

関連する問題