2015-12-23 19 views
1

發射相同的「按鍵」事件這是我的代碼:功能可與「按鍵」事件,但不同意我

$('#Example').on("keypress", function(keyEvent) { 

    if (keyEvent.which != 44) { 

     myFunction(keyEvent, $(this)); 

    } else { 

     event.preventDefault(); 
     var myEvent = jQuery.Event("keypress"); 
     myEvent.which = 46; 
     $(this).trigger(myEvent); 

    } 
}); 


function myFunction(event, element) { 
    //do stuff 
    console.log("Finished."); 
} 

如果按「」 (which = 46),myFunction完美填補,事件「。」是輸入的。但如果按「」,「(which = 44),myFunction也做東西,但事件」。「手動發射不是輸入!在這兩種情況下,控制檯都會打印「完成」。

我需要在以前的方式做,因爲如果我這樣做如下:

$('#Example').on("keypress", function(keyEvent) { 

    myFunction(keyEvent, $(this)); 

}); 


function myFunction(event, element) { 

    if (event.which == 44) { 

     event.which = 46; 

    } 

    //do stuff 
    event.preventDefault(); 
    $('#Example').val('.'); //is a example 

} 

爲「」不是由事件創建的,而是由我手動創建的,事件不會被觸發。

最後,myFunction情況如下:

function myFunction(event, element) { 

    var text = element.val(); 

    if (((event.which != 46 || element.val().indexOf('.') != -1) && 
    ((event.which < 48 || event.which > 57) && 
    (event.which != 0 && event.which != 8))) || 
    ((event.which == 46) && (element.val().indexOf('.') == -1) && 
    ((text.length - element[0].selectionStart) > 2))) { 

     event.preventDefault(); 

    } 

    if ((text.indexOf('.') != -1) && 
    (text.substring(text.indexOf('.')).length > 2) && 
    (event.which != 0 && event.which != 8) && 
    (element[0].selectionStart >= text.length - 2)) { 

     event.preventDefault(); 

    } 
} 

有什麼建議?

在此先感謝!

回答

0

問題與你的第一個功能是,你必須event.preventDefault();這應該是keyEvent.preventDefault();因爲沒有定義的事件:

$('#Example').on("keypress", function(keyEvent) { 

    if (keyEvent.which != 44) { 

     myFunction(keyEvent, $(this)); 

    } else { 

     keyEvent.preventDefault(); 
     var myEvent = jQuery.Event("keypress"); 
     myEvent.which = 46; 
     $(this).trigger(myEvent); 

    } 
}); 
+0

事實上,應該是keyEvent而不是事件,但我犯了一個錯誤重寫代碼在這裏試圖做到這一點更容易理解。我應該修改主要帖子嗎?非常感謝您的回覆! –

+0

無憂!您的myFunction正在調用每個按鍵事件,如果它的44則會調用myFunction和46。您現在想要做什麼? –

0

我不認爲你需要觸發事件的第二時間,而不是通過改變值的功能。這樣的事情:

$('#Example').on("keypress", function(event) { 
    var key = event.which; 
    myFunction(key !== 44 ? 46 : key, $(this), event); 
}); 

function myFunction(key, element, event) { 

    var text = element.val(); 

    if (((key !== 46 || text.indexOf('.') !== -1) && 
     ((key < 48 || key > 57) && 
     (key !== 0 && key !== 8))) || 
     ((key === 46) && (text.indexOf('.') === -1) && 
     ((text.length - element[0].selectionStart) > 2))) { 
     event.preventDefault(); 
    } 

    if ((text.indexOf('.') != -1) && 
     (text.substring(text.indexOf('.')).length > 2) && 
     (key !== 0 && key !== 8) && 
     (element[0].selectionStart >= text.length - 2)) { 
     event.preventDefault(); 
    } 
}