0

私はうまく機能する次のスクリプトを持っていますが、これは単純化できると思いますよね? また、一度だけトリガーしたいと思います。

例、ユーザーが「My Title」と入力します。スクリプトが実行され、スラッグ フィールドに「my-title」が表示されます。ユーザーがタイトルの値を「My Crazy Title」に置き換えた場合、スラッグは「my-title」のままにしたいと思います。どのように?

$('#article_title').change(function() {
  str = $('#article_title').val();
  formatted = str.replace(/\s+/g, '-').toLowerCase();
  $('#article_slug').val(formatted);
});

コード例http://jsfiddle.net/TSrYu/を参照してください

4

3 に答える 3

1
var changed = false;
$('#article_title').change(function () {
    // do some other stuff
    if (!changed) {
        str = $(this).val();
        formatted = str.replace(/\s+/g, '-').toLowerCase();
        $('#article_slug').val(formatted);
    }
    changed = true;
});

http://jsfiddle.net/mohammadAdil/TSrYu/1/

于 2013-04-23T21:52:41.373 に答える
0

2 つのマイナーな改善点があります。

  • 変数を適切に宣言してグローバルにしない。
  • アクセスすることですでに利用可能であるため、要素に対してDOMを再度クエリする必要はありませんthis

一度だけ発生するようにするには、イベントのバインドを解除します (スニペットの最後の行

$('#article_title').change(function() {
  var str = $(this).val();
  var formatted = str.replace(/\s+/g, '-').toLowerCase();
  $('#article_slug').val(formatted);
  $(this).unbind("change");
});
于 2013-04-23T21:54:41.573 に答える