2010-04-07 14 views
6

पास करने के लिए Jquery में ट्रिगर का उपयोग कैसे करें, मैं अपने सभी नियंत्रणों के लिए एक ही सत्यापन फ़ंक्शन का उपयोग करने का प्रयास कर रहा हूं। लेकिन मैं jQuery में ज्यादा नहीं जानता और ट्रिगर में इवेंट हैंडलर पास करने में सक्षम नहीं हूं। मैं अपने कस्टम फ़ंक्शन में टेक्स्टबॉक्स आईडी पास करना चाहता हूं। मैं क्या कर सकते हैं यह कैसेपैरामीटर डेटा के साथ-साथ नियंत्रण (यह)

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#txtFirstName").bind('focusout', function() 
    { 
    $(this).trigger("customblurfocus",[$(this).val(), $(this).val() + " Required !", "Ok !"]); 
    } 
); 

    $(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage) 
    {alert($(this).val()); 
    if($(this).val()=="" || $(this).val()==defaultInputValue) 
     { 
     $(this).val(defaultInputValue); 
     $(this).siblings("span[id*='error']").toggleClass("error_set").text(ErrorMessage).fadeOut(3000); 
     } 
    else 
     { 
     $(this).siblings("span[id*='error']").toggleClass("error_ok").text(ValidMessage).show(1000); 
     } 
    } 
    ); 
    }); 
</script> 

उत्तर

10

अद्यतन: मुझे लगता है कि मैं पता लगा आप क्या हासिल करना चाहते हैं और इस काम करना चाहिए (कस्टम घटनाओं में कोई जरूरत नहीं है):

function validate(element, defaultInputValue, ErrorMessage, ValidMessage) { 
    alert($(this).val()); 
    if($(this).val()=="" || $(this).val()==defaultInputValue) 
    { 
     $(this).val(defaultInputValue); 
     $(this).siblings("span[id*='error']").toggleClass("error_set").text(ErrorMessage).fadeOut(3000); 
    } 
    else 
    { 
     $(this).siblings("span[id*='error']").toggleClass("error_ok").text(ValidMessage).show(1000); 
    } 
} 

$(document).ready(function(){ 
    $("#txtFirstName").bind('focusout', function() { 
     validate(this, "defaultValue here", "Error message here", "Valid message here"); 
    }); 
}); 

आप प्रश्न हैं, बस से पूछते हैं:)


आपके बाउंड इवेंट हैंडलर का पहला पैरामीटर ईवेंट ऑब्जेक्ट है।

$('#foo').bind('custom', function(event, param1, param2) { 
    alert(param1 + "\n" + param2); 
}); 
$('#foo').trigger('custom', ['Custom', 'Event']); 

और: .trigger() documentation से उदाहरण देखें

घटना वस्तु हमेशा एक ईवेंट हैंडलर के लिए पहले पैरामीटर के रूप पारित हो जाता है, लेकिन अतिरिक्त पैरामीटर एक .trigger() कॉल वे कर रहे हैं के रूप में के दौरान निर्दिष्ट कर रहे हैं यहां, इन पैरामीटर को हैंडलर के साथ भी पास किया जाएगा।

तो तुम्हारा इस तरह दिखना चाहिए:

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

लेकिन यह बेहतर होगा कि आप वर्णित हैं तो त्रुटि आप वास्तव में मिलता है।


दूसरा मुद्दा: तो मैं देख रहा हूँ सही ढंग से दूसरा बाँध संदर्भ के बिना किसी भी तरह है:

$(document).ready(function(){ 
    $("#txtFirstName").bind('focusout', function(){}); 

    $(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage) 
    { //... 
    }); 
}); 

जो तत्व आप अपने कस्टम घटना बाध्य करने के लिए चाहते हैं के लिए? $(this) क्या होना चाहिए? इस स्थिति में, समारोह में पहले पैरामीटर के रूप में event जोड़ने के साथ भी, यह काम नहीं करेगा।
कृपया हमें अपनी HTML संरचना और/या जो आप प्राप्त करना चाहते हैं, उसके बारे में और बताएं।

1

तुम बस बाध्य ईवेंट हैंडलर के मुख्य भाग में अपने कस्टम कार्य करने के लिए कॉल कर सकते हैं:

$("#foo").bind("click", function(){ 
    callMyFunction(arg0, arg1, arg2); 
}); 

जैसे

function customHandler(defaultInputValue,ErrorMessage,ValidMessage) { 
    // define the body of your custom function here 
} 

$(this).bind('customblurfocus', function(){ 
    customHandler(defaultInputValue, ErrorMessage, ValidMessage); 
}); 
संबंधित मुद्दे