2013-02-22 15 views
8

प्रस्तुत करने से ऑनक्लिक ईवेंट के साथ सबमिट बटन मैं प्रस्तुत करने से ऑनक्लिक ईवेंट के साथ एक सबमिट बटन पर रोकना चाहते हैं:रोकें

<button class="button vm-button-correct" type="submit" 
onclick="javascript:return myValidator(userForm, 'savecartuser');">Opslaan</button> 

यह "चेतावनी दिखाएगा:

$j('form#userForm .button').click(function(e) { 
    if ($j("#zip_field").val() > 1000){ 
     $j('form#userForm .button').attr('onclick','').unbind('click'); 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
     e.preventDefault(); 
     return false; 
    } 
}); 

यह सबमिट बटन है "कार्य करता है और ऑनक्लिक घटना को भी हटा देता है, लेकिन फॉर्म वैसे भी सबमिट किया जाता है। सबमिट करने से पहले ऑनक्लिक घटना को मैन्युअल रूप से हटाएं समस्या को हल करेंगे। हालांकि यह मूल कार्यक्षमता है और मैं इसे हटाना नहीं चाहता हूं।

संपादित करें:

यह निश्चित रूप से onclick चयनकर्ता के कारण होती है .. मैं कैसे तुरन्त onclick घटना को फिर से लोड करने के लिए अपने jQuery स्क्रिप्ट मजबूर कर सकते हैं? jQuery कोड से पहले जोड़ने: $j('form#userForm .button').attr('onclick',''); मुद्दे का समाधान होगा .. लेकिन मेरी मान्यता एक अब काम नहीं करेगा ...

+0

आप वास्तव में फार्म के संचालक प्रस्तुत में करना चाहिए .. यदि एंटर दबाए जब फॉर्म फोकस हो जाता है .. यह सबमिट हैंडलर को ट्रिगर करेगा, न कि आपके क्लिक पर, इसलिए आपका सत्यापन –

उत्तर

18

आप एक पैरामीटर के रूप घटना जोड़ने की आवश्यकता होगी:

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.preventDefault(); 
     $j('form#userForm .button').attr('onclick','').unbind('click'); 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
    } 
}); 

इसके अलावा, हमेशा val() एक स्ट्रिंग देता है, इसलिए एक अच्छा अभ्यास इसे किसी संख्या से तुलना करने से पहले इसे किसी संख्या में परिवर्तित करना होगा, और मुझे यकीन नहीं है कि क्या आप वास्तव में .button तत्वों को #userForm के अंदर फ़ंक्शन के अंदर लक्षित कर रहे हैं, या यदि आपको उपयोग करना चाहिए इसके बजाय this?

आप jQuery 1.7+ का उपयोग कर रहे हैं, तो आप वास्तव में on() और off() इस के लिए उपयोग करने पर विचार करना चाहिए।

+0

thx को छोड़ दिया जाएगा, मैंने कोड संपादित किया लेकिन यह काम नहीं करता .. मुझे लगता है कि ऑनक्लिक घटना prevent.default को तोड़ती है ...? –

+0

ऑनलाइन जो ऑनलाइन है, हमेशा पहले निष्पादित करेगी, और यह वास्तव में अच्छा अभ्यास नहीं है कि इस तरह के एक इनलाइन फ़ंक्शन और एक ईवेंट हैंडलर हो, आपको शायद उस पर पुनर्विचार करना चाहिए, और केवल ईवेंट हैंडलर के लिए जाना चाहिए, और 'myvalidator' पर कॉल करें() 'बाहरी घटना हैंडलर से। – adeneo

+1

कई thx! मैंने पाया कि अब तक;) हालांकि मैं virtuemart के कोर कोड तोड़ना नहीं चाहता .. तो मैं इस तरह हल करने की कोशिश क्यों करता हूँ! –

0

भूल मत समारोह/घटना तर्क देखते हैं कि, लेकिन आप मापदंडों उल्लेख करना होगा:

$("#thing").click(function(e) { 
    e.preventDefault(); 
}); 

इस तरह, प्रस्तुत रुका है, और इसलिए आप इसे conditionalise कर सकते हैं।

12

असल में, यदि आप अपना बटन प्रकार type="submit" से type="button" से बदलते हैं, तो ऐसा बटन फॉर्म सबमिट नहीं करेगा, और कोई कामकाज की आवश्यकता नहीं है।

उम्मीद है कि इससे मदद मिलती है।

+0

कई thx ... हालांकि मुझे यकीन है कि ऑनक्लिक घटना –

+0

को दोषी ठहराती है, इस जवाब ने मेरे मामले को हल किया, मेरे लिए इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए, क्योंकि यह अधिक सार्वभौमिक है :) बहुत धन्यवाद! –

+0

मैं JQuery सत्यापन का उपयोग कर रहा हूँ। मेरे पास 'type = "बटन"' वाला बटन है लेकिन सत्यापन विफल होने पर भी फॉर्म पोस्टबैक है! [यहां] (http://stackoverflow.com/questions/29890544/page-still-postbacks-after-jquery- validation-fail/29890940#29890940) मेरा प्रश्न है। – sohaiby

0

सबसे अच्छा तरीका फ़ॉर्म के आपके सबमिट ईवेंट हैंडलर के अंदर सबकुछ करना है। इनलाइन onclick निकालें और प्रस्तुत समारोह के अंदर इसे चलाने

$j('#userForm').submit(function(e) { 
    if (+$j("#zip_field").val() > 1000){ 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
     return false; 
    } 
    return myValidator(userForm, 'savecartuser'); 
}); 
-2

मेरा मानना ​​है कि वहाँ एक आसान तरीका है:

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.stopPropagation(); 
    } 
}); 
संबंधित मुद्दे