1

データ属性に格納されている JavaScript 関数を実行しようとしています。

例えば

<form data-success="test">...</form>

$('form').on('submit', function(e){
    e.preventDefault();
    var successFunction = $(this).data('success');

    // Run success function here
});

function test(){
    alert('run');
};

これは可能ですか、それともより良い解決策がありますか?

4

1 に答える 1

1

そもそも、なぜアプリケーション ロジックを DOM に保存するのでしょうか? 関数を JavaScript のバッキング ビジネス ロジックに格納してみませんか?

これ、保守性の問題であることがわかります。これを行わないでください。代わりに、関数をコードに格納し、プレゼンテーションのロジックを実行時に発生するものから分離してください。

最も簡単な方法は、フォームを分類し、それに応じて関数を実行することです。より良いアプローチは、MV* パターンのようなものを使用することですが、分岐しないようにしましょう。これは、データ属性を保存せずに考えられる最も簡単なソリューションです。これでも問題を適切に分離することはできませんが、データ属性よりもはるかに単純です。

...

jQuery を使用した JavaScript:

/now we select by class, and not just any form
$('.successForm').on('submit', function(e){
    e.preventDefault();
    test();
});

function test(){
    alert('run');
};

そうは言っても、それは可能です。eval($(this).data("success"))-ただし、これは行わないでください。このビットは完全を期すためにここにあるだけです

于 2013-09-19T17:04:56.600 に答える