デフォルトの支払い方法でない場合、ユーザーが支払い方法をデフォルトの支払い方法として設定できるリンクがあります。彼らがクリックすると、クリックされたリンクのDOM変更を監視する短いスクリプトがあり、hrefまたはリンクテキストがhrefまたは "default"支払いメソッドのテキストになると、他のすべてのリンクがチェックされますページの「Make Default」と設定され、正しいURLなどを指すように設定されていることを確認します(そのうちの1つがデフォルトの支払い方法であると言えるでしょう)。jQueryを使用して属性を変更すると、ブートストラップデータトグルイベントが中断されます
私の問題は、jQueryを使ってリンクを更新すると、アンカータグが正しい限りHTMLになりますが、クリックするとデータトグルがもう発生しなくなります。
ここに初期リンク設定があります。最初にクリックするとデータトグルが機能するため、トグル情報が変更され、デフォルトになります。次に、このような別のリンクがクリックされ、これが私のjQuery経由でこの状態に戻ります。その時点では、もはやトグルしません。私はイベントをフォローすることなくトグルをトリガーする方法を見つけようとしましたが、イベントを停止するとトグルが止まります。私が一時的にhrefを変更したら、jQueryを使って変更して、私がすでにやっていることをやっています。
<a class="default-billing default-billing-bank fws-ajax"
id="<?php echo $method->bank_id; ?>"
href="/account/billing_bank_default/<?php echo $method->bank_id; ?>"
data-toggle-href="javascript:void(0)"
data-toggle-html="Default">Make Default</a>
ここでは、別のリンクをクリックしてデフォルトにしたときにデフォルトのリンクをリセットするために使用しているjQueryを示します。どうやら
を解決しました
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('.default-billing').on('click', function() {
var _this = jQuery(this);
jQuery('.default-billing').one('DOMSubtreeModified', function() {
//alert('Changed: ' + $("<div />").append(jQuery(this).clone()).html());
if (jQuery(this).text() == 'Default' || jQuery(this).prop('href') == 'javascript:void(0)') {
//alert('Default');
_this.removeClass('default-billing');
setTimeout(updateDefaultBillingLinks(), 300);
_this.addClass('default-billing');
}
});
});
});
function updateDefaultBillingLinks() {
jQuery('.default-billing').each(function() {
if (jQuery(this).text() == 'Default') {
/* I am not using this part, but tried it to see if I could just toggle it manually. I couldn't.
jQuery(this).toggle();
*/
jQuery(this).text('Make Default');
jQuery(this).data('toggle-href', 'javascript:void(0)');
jQuery(this).data('toggle-html', 'Default');
if (jQuery(this).hasClass('.default-billing-card')) {
jQuery(this).prop('href', '/account/billing_card_default/' + jQuery(this).prop('id'));
}
if (jQuery(this).hasClass('.default-billing-bank')) {
jQuery(this).prop('href', '/account/billing_bank_default/' + jQuery(this).prop('id'));
}
}
});
}
</script>
UPDATEは/、私は.data('toggle-[attribute]')
を使用する必要がありましたが、私の他の問題は、私は.hasClass()
をチェックしていたとき、私はクラス名の前に.
を入れていたということでした。私はそれを取り除かなければならなかった。
決勝のjQuery:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('.default-billing').on('click', function() {
var _this = jQuery(this);
jQuery('.default-billing').one('DOMSubtreeModified', function() {
if (jQuery(this).text() == 'Default' || jQuery(this).prop('href') == 'javascript:void(0)') {
_this.removeClass('default-billing');
jQuery('.default-billing').each(function() {
if (jQuery(this).text() == 'Default') {
jQuery(this).text('Make Default');
jQuery(this).data('toggle-href', 'javascript:void(0)');
jQuery(this).data('toggle-html', 'Default');
if (jQuery(this).hasClass('default-billing-card')) {
jQuery(this).prop('href', '/account/billing_card_default/' + jQuery(this).prop('id'));
}
if (jQuery(this).hasClass('default-billing-bank')) {
jQuery(this).prop('href', '/account/billing_bank_default/' + jQuery(this).prop('id'));
}
}
});
_this.addClass('default-billing');
}
});
});
});
</script>
?過剰殺人のようだ。コードスニップをセットアップできますか?あなたはブートストラップのアニメーションが完了するのを待っていますか? http://getbootstrap.com/javascript/#collapse-events – Malk
@Malk DOMイベントを使用して属性が変更されたときを確認しています。私はリンクがクリックされたことを知っていますが、基本的に、属性が変更されていない場合、更新は失敗し、コードの残りの部分を実行しません。 私は実際に私がなぜそこに遅れがあるのか覚えていません。古いコードかもしれません。私はちょうどそれを取って、おそらく関数コードをその領域に戻します。 – James