0

is(:focus)がアプローチでした。最終的なコードは次のとおりです。

setInterval(function(){
    if($j("SELECT[name='cf20_field_7']").is(":focus")) return false; 
    var information = '';
    var i = 1;
    $j("#cf20_field_1").html();
    //add new information to hidden field
    $j("#cforms20form .info_for_email").each(function(){
        var name = $j(this).find("INPUT[name='cf20_field_5']").val();
        var inn = $j(this).find("INPUT[name='cf20_field_6']").val();
        var view = $j(this).find("SELECT[name='cf20_field_7']").val();
        //render
        information += i + ")";
        information += "Наименование организации: " + name + ".<br/>\n";
        information += "Реквизиты организации: " + inn + ".<br/>\n";
        information += "Стоимость заказа: выписка " + view + ".<br/>\n";
        i++;
    })
    $j("#cf20_field_1").html(information);

    hovered = true;
}
    ,100
);

SELECTフィールドにホバーがないときに関数を起動する可能性はありますか?

また、SELECTフィールドにホバーがないことを確認するアプローチがあるかもしれません。

それは問題を引き起こします。別のオプションを選択しようとすると、setIntervalが機能しているときにカーソルが物乞いをします。

私が見つけた最良のアプローチは以下のとおりです。

//every 100 mil secconds update info
setInterval(function(){

    $j("SELECT[name='cf20_field_7']").trigger('change');
    if ( $j("SELECT[name='cf20_field_7']").on("change")) return false;
    var information = '';
    var i = 1;
    $j("#cf20_field_1").html();
    //add new information to hidden field
    $j("#cforms20form .info_for_email").each(function(){
        var name = $j(this).find("INPUT[name='cf20_field_5']").val();
        var inn = $j(this).find("INPUT[name='cf20_field_6']").val();
        var view = $j(this).find("SELECT[name='cf20_field_7']").attr("value");
        //render
        information += i + ")";
        information += "Наименование организации: " + name + ".<br/>\n";
        information += "Реквизиты организации: " + inn + ".<br/>\n";
        information += "Стоимость заказа: выписка " + view + ".<br/>\n";
        i++;
    })
    $j("#cf20_field_1").html(information);
}
    ,100
);

詳細情報:状況を詳しく説明できます。だから私はフォームを持っていました。別のイベントがアタッシェであるため、onsubmitイベントは機能しませんでした。だから私は100ミリ秒ごとにフォームの最初のフィールドの値を更新することにしました。値には、動的に作成されたすべての「選択と入力」が含まれています。しかし、マウスでselectの値を変更しようとすると。関数が起動され、関数がselectの値をチェックして、マウスの物乞いを引き起こします。したがって、関数の起動を防ぐために、その選択がホバーされているかどうかを何らかの方法で確認する必要があります。

4

2 に答える 2

2

ここでは無効です:

if ( SELECT[name='cf20_field_7'].on("change"))

私はあなたがこれを必要とすると思います:

if ( $("SELECT[name='cf20_field_7']").on("change"))

しかし、それでも、上記は無効です。次のようなハンドラーが必要です。

$("SELECT[name='cf20_field_7']").on("change", function(){
    return false;
});
于 2013-01-08T10:21:48.697 に答える
0
if ($j("SELECT[name='cf20_field_7']").on("change")) return false

ここで何をチェックすべきか明確ではありません。selectでもonchangeにアタッチされた関数を実行したいと思います。その場合は、.triggerの代わりにを使用する必要があり.onます。ただし、どちらの場合も、戻り値は(連鎖の目的で)jqueryオブジェクトになるため、基本的に、ステートメントはとの両方で常にtrueになります。selecttriggeron値をテストする場合は、次のようにする必要があります。

if(someTestFunct($j("SELECT[name='cf20_field_7']"))) return false;
function someTestFunct(jObj) {
    //some other code?
    return jObj.val() == "some value to test";
}

おそらくいくつかのより良いアプローチが使用されるかもしれませんが、詳細がなければ何かを提案するのは難しいです。

于 2013-01-08T11:07:57.233 に答える